使用Java中的sqlite获取最后插入的id的最佳方法是什么?谷歌给了我不同的答案 - 有人说选择last-insert-rowid; 其他人说call statement.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(); }
getGeneratedKeys()
如果您的JDBC驱动程序支持它,请使用 您不希望在插入后尝试自己获取密钥.如果你的驱动程序不支持,getGeneratedKeys()
那么我会在插入之前从密钥中获取下一个值.