从Java使用sqlite获取最后插入的id的最佳方法是什么?
从Java使用sqlite获取最后插入的id的最佳方法是什么?谷歌给了我不同的答案 - 有人说选择最后插入的行;其他人说调用语句.getGeneratedKeys()。最好的路线是什么?(我只想返回id,而不是将其用于其他插入或其他任何内容。
从Java使用sqlite获取最后插入的id的最佳方法是什么?谷歌给了我不同的答案 - 有人说选择最后插入的行;其他人说调用语句.getGeneratedKeys()。最好的路线是什么?(我只想返回id,而不是将其用于其他插入或其他任何内容。
这两种方法都执行完全相同的 SQL 语句,但 java.sql.Statement.getGeneratedKeys()
对于不同的底层数据库更具可移植性。
使用 sqlite3_last_insert_rowid()
C API 函数或 last_insert_rowid()
SQL 函数是检索上次插入期间生成的 rowid 的正确方法。
SQLite 支持 SQL 标量函数语法如下:
SELECT function-name();
因此,如果您不能直接访问 C API,则可以通过语句调用标量函数。last_insert_rowid()
SELECT
如果你看一下 SQLiteJDBC 实现的源代码(这是你正在使用的吗?),你会发现这正是 JDBC 包装器的作者所做的:
ResultSet getGeneratedKeys() throws SQLException {
if (getGeneratedKeys == null) getGeneratedKeys = conn.prepareStatement(
"select last_insert_rowid();");
return getGeneratedKeys.executeQuery();
}
如果您的 JDBC 驱动程序支持,请使用它。你不想在插入后试图自己拿到钥匙。如果您的驱动程序不支持,那么我将从插入之前的键中获取下一个值。getGeneratedKeys()
getGeneratedKeys()