2013-11-04 30 views
0

我創建了一個包含名稱,信息的數據庫,並且還爲每個獲取到數據庫的對象提供了一個「_id」。如何獲取我剛添加到數據庫的最新對象的ID?

現在我想下一個函數在年底獲得新添加的對象是獲得ID - 我已經嘗試了下面的代碼 - 但是我相信這不是正確的方式

public long insertAuto(Student student){ 
     SQLiteDatabase db = dbOpen.getWritableDatabase(); 

     ContentValues vals = new ContentValues(); 
     vals.put(Constants.STUDENT_NAME, student.getName()); 
     vals.put(Constants.STUDENT_INFO, movie.getInfo()); 

     db.insert(Constants.TABLE_NAME_STUDENTS, null, vals); 

      //this is where i thinks is my mistake! 
     long id = student.getId(); 

     db.close(); 

     return id; 
    } 

所以謝謝你爲任何一種幫助

+1

我覺得這個問題已經存在。檢查它從:http://stackoverflow.com/questions/4017903/get-last-inserted-value-from-sqlite-database-android – blitzen12

回答

3

檢查的SQLiteDatabase.insert()

的文檔,它返回新插入的ROWID爲你。

public long insertAuto(Student student){ 
    SQLiteDatabase db = dbOpen.getWritableDatabase(); 

    ContentValues vals = new ContentValues(); 
    vals.put(Constants.STUDENT_NAME, student.getName()); 
    vals.put(Constants.STUDENT_INFO, movie.getInfo()); 

    long id = db.insert(Constants.TABLE_NAME_STUDENTS, null, vals); 

    db.close(); 

    return id; 
} 
2

使用返回值SQLiteDatabase.insert()方法。

隨着documentation狀態,此方法返回

the row ID of the newly inserted row, or -1 if an error occurred 
+0

你的意思是我應該使用'db.insert(Constants.TABLE_NAME_STUDENTS,null,瓦爾斯);」作爲一個ID的返回值? – 4this

+0

我更新了我的答案,希望現在清楚:) –

0

你可以試試這個:

String query = "SELECT ROWID from TABLE_NAME_STUDENTS order by ROWID DESC limit 1"; 

Cursor c = db.rawQuery(query); 

if (c != null) { 

    c.moveToFirst(); 
    id = c.getLong(0); 
} 
0

1 /如果您自己在應用程序中生成id,那麼您所做的是正確的。

lastId = theLastSavedStudentObject.get(id); 

2 /看看你的代碼,看來你讓數據庫自動生成的ID(也許是MySQL的自動增量),那麼最後一個ID必須是從數據庫或通過從插入函數返回的選擇。

lastSaveId = db.insert(Constants.TABLE_NAME_STUDENTS, null, vals); 
從DB使用此SQL查詢

或直接查詢:

select max(id) from mytable; (for autoincrement ID) 
0

當你運行一個查詢插入數據庫,它返回當前插入行,只要值的行ID。

long id = db.insert(Constants.TABLE_NAME_STUDENTS, null, vals); 
return id; 

此行ID將是唯一的,可用於進一步的查詢。

相關問題