使用Java中的sqlite获取最后插入的id的最佳方法是什么?

时间:2008-10-19 18:41:03

标签: java sqlite jdbc

使用Java中的sqlite获取最后插入的id的最佳方法是什么?谷歌给了我不同的答案 - 有人说选择last-insert-rowid;其他人说call statement.getGeneratedKeys()。什么是最好的路线? (我只想返回id,不要将它用于其他插入或任何东西。)

2 个答案:

答案 0 :(得分:22)

这两种方法都执行完全相同的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,则可以通过last_insert_rowid()语句调用标量函数SELECT

如果你查看source code实现的SQLiteJDBC(这是你正在使用的吗?),你会发现这正是JDBC包装器的作者所做的:

ResultSet getGeneratedKeys() throws SQLException {
    if (getGeneratedKeys == null) getGeneratedKeys = conn.prepareStatement(
        "select last_insert_rowid();");
    return getGeneratedKeys.executeQuery();
}

答案 1 :(得分:9)

如果您的JDBC驱动程序支持,请使用getGeneratedKeys()。您不希望在插入后尝试自己获取密钥。如果您的驱动程序不支持getGeneratedKeys(),那么我会在插入之前从密钥中获取下一个值。