使用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实现的源代码 (这是你正在使用的吗?),你会发现这正是JDBC包装器的作者所做的:
ResultSet getGeneratedKeys() throws SQLException { if (getGeneratedKeys == null) getGeneratedKeys = conn.prepareStatement( "select last_insert_rowid();"); return getGeneratedKeys.executeQuery(); }