Android Sqlite获取最后一个插入行ID

时间:2011-09-27 20:22:48

标签: android sqlite

  

可能重复:
  Get generated id after insert

我希望使用以下代码在我的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。

感谢!!!

2 个答案:

答案 0 :(得分:36)

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

SELECT ROWID from SQL_LITE_SEQUENCE order by ROWID DESC limit 1

另请注意,我相信从SQL_LITE_SEQUENCE中选择将从ANY表中获取最新的ID,您还可以通过在任何表上选择ROWID来访问SQL_LITE_SEQUENCE,并获取该表的ID。 IE

SELECT ROWID from MYTABLE order by ROWID DESC limit 1

感谢MisterSquonk指出评论的下一步,将其添加到此处以方便以后参考......

然后查询语句将返回一个包含结果的Cursor对象,所以要访问整数值,你会做这样的事情(我会用你的帮助方法替换更常用的方法,只是为了别人的缘故)

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中它应该被检索为long。)

答案 1 :(得分:12)

小心使用“select last_insert_rowid()”? :)

相关问题