繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM