我希望使用以下代码在我的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。
感谢!!!
答案 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()
”? :)