• sqlite 错误


    一、遇见错误IllegalArgumentException: column '_id' does not exist

    解决:建的表中必须以'_id'为主键,且利用Cursor查询中必须要查询这个值

            1)创建数据表时插入一个名为_id的列,类型为自增量,因为在使用Cursor相关的Adapter时需要用到这个列

            2)如果实在不需要这个列的话,可以把数据表中某一列使用AS映射为 _id,再进行操作

    二、把数据库的部分列的内容显示到ListView    

    if(mCur!=null&&row>=0){
                ListAdapter adp = new SimpleCursorAdapter(this, 
                                 //定义List中每一行的显示模块,表示每一行包含两个数据项
                                  android.R.layout.simple_expandable_list_item_2, 
                                  mCur, 
                                  //将数据库的NAME与AGE两列拿出来显示
                                  new String[] {mDb.NAME,mDb.AGE}, 
                                  new int[] {android.R.id.text1,android.R.id.text2});
                mList.setAdapter(adp);
            }

    现在,我很无聊的想把每一个item的两个数据项中的name项取出来

    mList.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {//注意:此处的parent是整个ListView,而view才是我们点击的那一个item
                   // mList.getItemAtPosition(position);
                   //这里之所以要用ViewGroup是因为需要用到getChildA方法,但是这个方法普通view是没有的,
    ViewGroup viewg
    = (ViewGroup) view; TextView v = (TextView)viewg.getChildAt(0); String name = (String)v.getText(); //用String转换,因为v.getText()取出的是charsequence } });

    三、当想删除name = fenghao 的记录时报错

          根据_id删除记录时,db.delete(TABLE_NAME, KEY_ID+"="+rowid, null);正确。

          我想到是否能以此种方式删除“name = 冯浩”的记录。于是照写为db.delete(TABLE_NAME, NAME+"="+name, null);报错。

          错误:android.database.sqlite.SQLiteException: no such column: 冯浩: DELETE FROM T1 WHERE name=冯浩

          报的错误很清楚的说了没有名为冯浩的这一列,我的确没有名为冯浩的这一列,但是我这么写的目的是为了删除名为name的这一列中为冯浩的记录,但是为什么它会认为是要删除名为冯浩的这一列了?

    为什么删除_id的时候就是对的了?值得思考,难道因为KEY_ID是主键吗?

          解决:改为db.delete(TABLE_NAME, "name =?", new String[]{name});

    四、报错android.database.sqlite.SQLiteException: near ...

          错误提示为语法错误,百度后发现SQLite中text的比较不能用“=”,而需要用诸如Like/In /Between等关键字

          改为String DELETE_RECORD = "DELETE FROM " + TABLE_NAME + " WHERE name Like '冯浩'";

          即Like后面的字符串需要用单引号括起来。

    五、取出数据库中的一列数据

        cur.getString(cur.getColumnIndex(columnName));

  • 相关阅读:
    第五单元 shell编程 摩天居士
    第六单元 磁盘阵列与逻辑卷 摩天居士
    第七单元 文件查找与文件特殊权限 摩天居士
    第三单元 文件压缩与磁盘管理 摩天居士
    第二单元 文件和用户管理 摩天居士
    shell编程获取服务器资产信息 摩天居士
    第四单元 正则表达式与软件包管理 摩天居士
    欧姆龙CXOne4.31启动仿真报错 因为计算机中丢失OSLicence.dll。尝试重新安装该程序...
    VS2019 使用QT插件导入项目时导入失败 Please look in the output above for errors and warnings.
    qt5 断开 lambad槽
  • 原文地址:https://www.cnblogs.com/wyqfighting/p/2719074.html
Copyright © 2020-2023  润新知