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