“SELECT last_insert_rowid()”总是返回“0”

时间:2012-07-02 22:57:26

标签: android sqlite

我遇到“last_insert_rowid()”问题。

在我的DB-Helper-Class中,我正在执行以下操作:

public int getLastID() {
    final String MY_QUERY = "SELECT last_insert_rowid() FROM "+ DATABASE_TABLE5;
    Cursor cur = mDb.rawQuery(MY_QUERY, null);
    cur.moveToFirst();
    int ID = cur.getInt(0);
    cur.close();
    return ID;
}

但是当我在意图中称呼它时:

int ID = mDbHelper.getLastID(); 
Toast.makeText(this, "LastID: " + ID, Toast.LENGTH_SHORT).show();

我总是“0”回来。这不可能,因为我的数据库中有很多条目,自动增量值应该高得多。

我做错了什么?

2 个答案:

答案 0 :(得分:21)

好的,这是John的正确暗示; - )

查询应如下所示:

public int getHighestID() {
final String MY_QUERY = "SELECT MAX(_id) FROM " + DATABASE_TABLE5;
Cursor cur = mDb.rawQuery(MY_QUERY, null);
cur.moveToFirst();
int ID = cur.getInt(0);
cur.close();
return ID;
}   

答案 1 :(得分:11)

您不需要将表名与last_insert_rowid()放在一起,它会自动从会话中选择最后插入的ID。所以你也可以简单地使用这个功能。

public int getHighestID() {
    final String MY_QUERY = "SELECT last_insert_rowid()";
    Cursor cur = mDb.rawQuery(MY_QUERY, null);
    cur.moveToFirst();
    int ID = cur.getInt(0);
    cur.close();
    return ID;
}