这个问题已经在这里有了答案:




已关闭8年。






我想使用此代码获取我的android应用程序中最后插入的行ID:

String query = "SELECT * from SQLITE_SEQUENCE";
int createdUserId = Integer.parseInt(dbHelper.executeSQLQuery(query).toString());

但问题是它引发了一个异常,无法将dbHelper.executeSQLQuery(query).toString()转换为整数。我不太擅长sqlite,但是我认为这应该返回插入的最后一行ID ...这肯定是int的(至少我这样认为)。因此,如果这不是正确的方法,有人可以指导我如何在android应用程序中获取最后一行ID。

谢谢!!!

最佳答案

您的SQL声明将返回所有行ID,而不仅仅是最新行。尝试这样的事情...

SELECT ROWID from SQL_LITE_SEQUENCE order by ROWID DESC limit 1

还要注意,我相信从SQL_LITE_SEQUENCE中进行选择会从ANY表中获取最新的ID,您还可以通过在任何表上选择ROWID并仅获取该表的ID来访问SQL_LITE_SEQUENCE。 IE
SELECT ROWID from MYTABLE order by ROWID DESC limit 1

感谢MisterSquonk指出注释中的下一步,并将其添加到此处以供以后引用。

然后,查询语句将返回一个包含结果的Cursor对象,因此要访问整数值,您将需要执行以下操作(我将使用其他更常用的方法替代您的helper方法,仅出于其他目的)
String query = "SELECT ROWID from MYTABLE order by ROWID DESC limit 1";
Cursor c = db.rawQuery(query);
if (c != null && c.moveToFirst()) {
    lastId = c.getLong(0); //The 0 is the column index, we only have 1 column, so the index is 0
}

(请注意,尽管SQL Lite文档调用ROWID和Integer,但它是64位整数,因此在Java中应将其检索为长整数。)

09-25 22:15