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

And*_*oid 12 sqlite android

可能重复:
插入后获取生成的ID

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

String query = "SELECT * from SQLITE_SEQUENCE";
int createdUserId = Integer.parseInt(dbHelper.executeSQLQuery(query).toString());
Run Code Online (Sandbox Code Playgroud)

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

谢谢!!!

Flo*_*der 36

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

SELECT ROWID from SQL_LITE_SEQUENCE order by ROWID DESC limit 1
Run Code Online (Sandbox Code Playgroud)

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

SELECT ROWID from MYTABLE order by ROWID DESC limit 1
Run Code Online (Sandbox Code Playgroud)

感谢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
}
Run Code Online (Sandbox Code Playgroud)

(请注意,虽然SQL Lite文档调用ROWID和Integer,但它是64位整数,所以在Java中它应该被检索为long.)


Jim*_*myB 12

小心使用" selectlast_insert_rowid()"?:)