[英]What's the best way to get the last inserted id using sqlite from Java?
使用Java中的sqlite获取最后插入的ID的最佳方法是什么? Google给我不同的答案-有人说选择last-insert-rowid; 其他人说调用statement.getGeneratedKeys()。 最好的路线是什么? (我只想返回id,而不将其用于其他插入或其他操作。)
两种方法都执行相同的确切SQL语句,但是java.sql.Statement.getGeneratedKeys()
更易于移植到不同的基础数据库。
使用sqlite3_last_insert_rowid()
C API函数或last_insert_rowid()
SQL函数是检索在上一次插入期间生成的行ID的正确方法。
SQLite支持以下SQL标量函数语法:
SELECT function-name();
因此,如果您无权直接访问C API,则可以通过SELECT
语句调用标量函数last_insert_rowid()
。
如果查看SQLiteJDBC实现的源代码 (这是您正在使用的吗?),您将看到这正是该JDBC包装程序的作者所做的:
ResultSet getGeneratedKeys() throws SQLException {
if (getGeneratedKeys == null) getGeneratedKeys = conn.prepareStatement(
"select last_insert_rowid();");
return getGeneratedKeys.executeQuery();
}
如果您的JDBC驱动程序支持getGeneratedKeys()
,请使用它。 您不想在插入后尝试自己获取密钥。 如果您的驱动程序不支持getGeneratedKeys()
那么我将在插入之前从键中获取下一个值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.