【问题标题】:RuntimeException - java.lang.IllegalArgumentException: column '_id' does not exist [duplicate]RuntimeException - java.lang.IllegalArgumentException:列'_id'不存在[重复]
【发布时间】:2016-05-07 21:04:53
【问题描述】:

在我的应用程序中,我试图从我的数据库中的表中读取数据,该表的创建方式如下:

public DBHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
    String createDreamTable = String.format("CREATE TABLE IF NOT EXISTS %s" +
            "( %s INTEGER PRIMARY KEY AUTOINCREMENT, " +
            "%s VARCHAR, " +
            "%s TEXT);",
            DreamContract.Dream.DREAM_TABLE_NAME,
            DreamContract.Dream._ID,
            DreamContract.Dream.COLUMN_NAME_DREAM_TITLE,
            DreamContract.Dream.COLUMN_NAME_DREAM_CONTENT);
    Log.d("avirankatz", createDreamTable);
    db.execSQL(createDreamTable);
}

当我尝试使用 GetDreamTitles 从 DB 获取数据时,如下所示,我得到 java.lang.IllegalArgumentException: column '_id' does not exist

public Cursor getDreamTitles() {
    return getReadableDatabase().rawQuery(String.format("SELECT %s FROM %s", DreamContract.Dream.COLUMN_NAME_DREAM_TITLE, DreamContract.Dream.DREAM_TABLE_NAME), null);
}

编辑:

DreamContract.Dream:

public static abstract class Dream implements BaseColumns {
    public static final String DREAM_TABLE_NAME = "dreamDiary";
    public static final String COLUMN_NAME_DREAM_TITLE = "title";
    public static final String COLUMN_NAME_DREAM_CONTENT = "dreamContent";
}

【问题讨论】:

  • 请附上DreamContract.Dream的常量
  • 我不相信那条线会抛出Exception。听起来您使用的是CursorAdapter,它需要Cursor 中的_id 列。如果是这种情况,您需要在 SELECT 查询投影中包含 _id 列。
  • @MikeM。我不想显示_id 值。如何在不查看的情况下将其包含在SELECT 中?
  • 您不必显示它。它只需要在Cursor 中。您可以选择在 Adapter 中显示哪些值。

标签: java android sqlite


【解决方案1】:

像这样在查询中添加主键 _id

getReadableDatabase().rawQuery(
    String.format(
        "SELECT %s, %s FROM %s", 
        DreamContract.Dream._ID, 
        DreamContract.Dream.COLUMN_NAME_DREAM_TITLE, 
        DreamContract.Dream.DREAM_TABLE_NAME
    ), 
    null
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-30
    • 2014-02-24
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 2011-06-25
    • 2011-03-22
    相关资源
    最近更新 更多