使用 Java 中的 sqlite 获取最后插入的 ID 的最佳方法是什么? Google 给了我不同的答案——有人说选择 last-insert-rowid;有人说选择 last-insert-rowid;其他人说调用 statement.getGeneratedKeys()。最好的路线是什么? (我只想返回 id,而不是将它用于其他插入或任何东西。)
最佳答案
这两种方法都执行完全相同的 SQL 语句,但是 java.sql.Statement.getGeneratedKeys()
更易于移植到不同的底层数据库。
使用 sqlite3_last_insert_rowid()
C API 函数或 last_insert_rowid()
SQL 函数是检索上次插入期间生成的 rowid 的正确方法。
SQLite 支持 SQL scalar function语法为:
SELECT function-name();
因此,如果您无法直接访问 C API,则可以通过 SELECT
语句调用标量函数 last_insert_rowid()
。
如果您查看 source code对于 SQLiteJDBC实现(这是您正在使用的吗?)您将看到这正是该 JDBC 包装器的作者所做的:
ResultSet getGeneratedKeys() throws SQLException {
if (getGeneratedKeys == null) getGeneratedKeys = conn.prepareStatement(
"select last_insert_rowid();");
return getGeneratedKeys.executeQuery();
}
关于java - 从 Java 使用 sqlite 获取最后插入的 id 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/216790/