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

标签 java sqlite jdbc

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

最佳答案

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

如果您查看 source code对于 SQLiteJDBC实现(这是您正在使用的吗?)您将看到这正是该 JDBC 包装器的作者所做的:

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

关于java - 从 Java 使用 sqlite 获取最后插入的 id 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/216790/

相关文章:

ios - FMDB 和加密

java - 为什么显示 "No database Selected"SQLException

java 。不接受 0 作为文本字段中的第一个输入

java - 如何读取AndroidManifest.xml中的CPU、RAM或其他硬件属性

用于显示 SQL 表的列中的行数的 Java 应用程序脚本。 SQL 查询错误。输出应该在标签中

java - 如何将 ResultSet 插入到新的 MYSQL 表中?

java - 在 JDBC4.0 及更早版本中使用 try-with-resources 语句

java - 可以用ant修改源码吗?

python - 将unicode插入sqlite?

java - 无法使用 Android Studio 2.1 从 SQLite 数据库获取值