"SELECT last_insert_rowid()" 总是返回 "0"

17

我在使用"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”作为回复。这不可能,因为我的数据库中有很多条目,自增值应该要高得多。

我做错了什么?


9
你是否在最后一次插入后立即获取行ID?据我理解,此函数只会在你使用与最后一次插入相同的已打开连接时返回行ID。 - JohnP
1
哦,那我误解了这个函数。可能是这样的。我想要做的是获取表中最高的ID。还有其他的函数可以实现吗? - venni
@JohnP - 谢谢,你的评论帮助我找到了一个错误。 - Kristy Welsh
2个回答

22

好的,那确实是正确的提示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;
}   

13

你不需要在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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接