Android 查詢Sqlite表中的資料時,表中必須得有_id欄位,否則報錯
阿新 • • 發佈:2019-01-28
1.情況:使用外部自建表 .db 檔案(自建的表,沒有_id 欄位),通過raw 載入/拷貝到內部儲存中去。當我想去與 SimpleCursorAdapter進行關聯使用的時候,即進行對庫的表查詢,返回Cursor結果,將結果通過Adapter.swapCursor()去置換資料來源顯示。會報錯
05-18 15:59:20.220: E/AndroidRuntime(2601): java.lang.IllegalArgumentException: column '_id' does not exist
05-18 15:59:20.220: E/AndroidRuntime(2601): at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:303 )
05-18 15:59:20.220: E/AndroidRuntime(2601): at android.widget.CursorAdapter.swapCursor(CursorAdapter.java:342)
解決:將我們自己的可以當成_id欄位的欄位,在我們進行Select的時候,在後面跟上 AS _id. 如:
mDb.query(
DBContants.DB_DEVICES_TABLE_NAME, new String[] { "DEVICEID AS _id", "DEVICENAME", "DEVICEALIAS", "DEVICETYPE" ,
"CONFSTATUS", "SCENE", "TEMPLETID", "BRAND", "MODELCODE" },
"SCENE =" + sceneType, null, null, null, null);
或
mDb.execSQL( " SELECT DEVICEID AS _id,DEVICENAME,DEVICETYPE from " + DBContants.DB_DEVICES_TABLE_NAME );