一、遇见错误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));