0

我想我已经检查了关于这个问题的所有以前的帖子,但似乎没有一个对我有帮助......

基本的东西 - 尝试使用绑定到我的数据库的游标适配器,但我得到:

java.lang.IllegalArgumentException: column '_id' does not exist

我的架构定义了该列(尽管我确实有 2 个表,两者都具有相同的名称 - 这是一个问题吗?),如下所示:

public static abstract class dbMain implements BaseColumns {
    public static final String TABLE_NAME = "mpgMain";
    public static final String ENTRY_ID = "_id";
    public static final String VEHICLE_NAME = "v_name";

}

public static abstract class dbHistory implements BaseColumns {
    public static final String TABLE_NAME = "mpgHistory";
    public static final String ENTRY_ID = "_id";
    public static final String TRIP_DATE = "date";

}

在其他帖子中,我已将 _id 放入光标投影中:

String[] projection = {dbMain.ENTRY_ID, dbMain.VEHICLE_NAME};

Cursor mpgCur = mpgDB.query(dbMain.TABLE_NAME, projection, null, null, null, null, null);

...但是我的堆栈跟踪在查询行上给出了同样的错误。如果我从投影中删除 ENTRY_ID,则会出现相同的错误,但在后面的行中实例化了适配器:

String[] fromColumns = {dbMain.VEHICLE_NAME};
int[] toViews = {R.id.displayVehicle};

SimpleCursorAdapter vehAdapter = new SimpleCursorAdapter(this, 
    R.layout.activity_first_screen, mpgCur, fromColumns, toViews, 0);  <--- HERE

我还尝试在 CREATE TABLE 命令中的 _id 字段之前放置一个空格:

private static final String SQL_CREATE_MAIN_TABLE =
"CREATE TABLE " + dbMain.TABLE_NAME + " ( " +
    dbMain.ENTRY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +

任何想法都非常感谢...

4

1 回答 1

0

如果我没记错的话,通过实现 BaseColumns,您不必在架构中指定“_id”。只需使用常量 _ID (so, dbMain._IDand dbHistory._ID)

于 2014-02-12T16:01:10.480 回答