日期:2014-05-16 浏览次数:20427 次
过程中出现了一个问题,关于这一部分,必须注意sqlite的主键命名,由于simpleCursorAdapter的方法只识别_id,所以,当你用到sqlite的simpleCursorAdapter时,必须把数据表的主键命名为_id。否则就会出现
java.lang.IllegalArgumentException: column '_id' does not exist
错误。必须要有这个?_id才能用SimpleCursorAdapter
?
而假如我们的数据表列名中并未定义名为“?_id?”的列名,如:我的数据表中定义了三列,列名分别为:“?_id1”?,?”?name1?”?,?”?bir?”,这样,表中就没有名为“?_id?”的数据库,(?ps?:如果你的数据表中刚好就把某一列定义成了?_id?,那么肯定是不会出现这种错误了)?[9] 查找原因: 仔细查看?Android?的开发文档中有关?SimpleCursorAdapter()?的说明发现,?SimpleCursorAdapter()?的父类是CursorAdapter()?,?CursorAdapter()?有一个很隐蔽的规定? ? The Cursor must include a column named "_id" or this class will not work.?也就是说,我们查询结果集游标Cursor?返回的数据中,一定要有一列名为“?_id?”,否则这个类将不起作用,这也就是为什么?Eclipse?会报上面的错误。 解决方案: ????这种情况无需修改数据库。为满足?CursorAdapter()?类的要求,我们可以在查询语句相关代码中作如下修改:(?ps?:?chi?数据表三列名为:?_id1,name1,bir?) 原代码: ???????public Cursor getAll(){ ??????????????return db.rawQuery("SELECT * FROM chi", null); ???????} 修改后代码: ???????public Cursor getAll(){ ??????????????return db.rawQuery("SELECT _id1 AS _id ,name1 , bir FROM chi", null); ??????????????//return db.rawQuery("SELECT * FROM chi", null); ???????}
?
?
package com.db;
?
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
?
/**
?* Created by IntelliJ IDEA.
?* User: titus
?* Date: 11-10-27
?* Time: 上午9:42
?*/
public class MyDBHelp