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));

posted @ 2012-10-15 10:25  little_star  阅读(393)  评论(0编辑  收藏  举报