【发布时间】: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中显示哪些值。