我在android開發中使用SQLite。當我使用insert插入一行時,我得到了該行的編號。不過,我想要KEY_ID這是表的主鍵。我使用了下面的功能,但我得到了:如何從行號獲取光標
Caused by: java.lang.IllegalStateException: get field slot from row 0 col -1 failed
at android.database.CursorWindow.getLong_native(Native Method)
at android.database.CursorWindow.getInt(CursorWindow.java:434)
at android.database.AbstractWindowedCursor.getInt(AbstractWindowedCursor.java:93)
at winterfarmer.timemama.DataBaseAdapter.insertData(DataBaseAdapter.java:89)
at winterfarmer.timemama.ManagerActivity.addNewRecord2DB(ManagerActivity.java:106)
at winterfarmer.timemama.ManagerActivity.addNewRecord(ManagerActivity.java:100)
at winterfarmer.timemama.ManagerActivity.addNewRecord2DB(ManagerActivity.java:106)
at winterfarmer.timemama.ManagerActivity.addNewRecord(ManagerActivity.java:100)
at winterfarmer.timemama.ManagerActivity.setRecordOK(ManagerActivity.java:92)
at winterfarmer.timemama.ManagerActivity.setRecord(ManagerActivity.java:78)
at winterfarmer.timemama.ManagerActivity.onActivityResult(ManagerActivity.java:64)
at android.app.Activity.dispatchActivityResult(Activity.java:3890)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3511)
我該如何解決這個錯誤?
public int insertData(RecordInfo recordInfo) {
Log.d(TAG, "insertData");
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_HOUR, recordInfo.hour);
initialValues.put(KEY_MINUTE, recordInfo.minute);
initialValues.put(KEY_REPEAT, recordInfo.repeat);
long rowId = db.insert(DB_ALARM_TABLE, null, initialValues);
assert rowId >= 0 : "insertData failed";
Log.d(TAG, "insertData, rowId = " + rowId);
Cursor cur = db.rawQuery("SELECT last_insert_rowid() from "
+ DB_ALARM_TABLE, null);
cur.moveToFirst();
int colId = cur.getColumnIndex(KEY_ID);
Log.d(TAG, "insertData, colId = " + colId);
assert colId >= 0 : "insertData failed";
return cur.getInt(colId);
}
請上傳您的完整堆棧跟蹤。 –
哪一個是你的適配器的第89行? – Guillaume
爲了將來的參考,請不要將堆棧跟蹤或代碼作爲註釋發佈,它們不可讀。改爲編輯問題。 – NullUserException