12

我正在使用 JDBC 连接到 Java DB 数据库,并且想要检索插入的最后一条记录的 id(自动递增)。

我看到这是一个常见问题,但我看到使用例如 MS SQL Server 的 解决方案,Java DB 的等价物是什么?

4

3 回答 3

26

无需为此使用特定于 DBMS 的 SQL。

这就是getGeneratedKeys()的用途。

准备语句时,您传递自动生成的列的名称,然后您可以使用 getGeneratedKeys() 检索这些列

PreparedStatement pstmt = connection.prepareStatement(
     "insert into some_table (col1, col2, ..) values (....)", 
      new String[] { "ID_COLUMN"} ); 

pstmt.executeUpdate();

ResultSet rs = pstmt.getGeneratedKeys(); // will return the ID in ID_COLUMN

请注意,在这种情况下,列名区分大小写(在 Derby 和许多其他 DBMS 中)。
new String[] { "ID_COLUMN"} 是不同的东西new String[] { "id_column"}


或者,您也可以使用:

connection.prepareStatement("INSERT ...", PreparedStatement.RETURN_GENERATED_KEYS);
于 2011-02-04T07:51:40.327 回答
3

您可以使用 IDENTITY_VAL_LOCAL 函数获得所需的内容。(德比参考

该函数应该返回“最近为连接分配的标识列的值,其中分配是由于使用 VALUES 子句的单行 INSERT 语句而发生的”。

值得注意的是,该函数将返回 DECIMAL(31,0),而不管相应标识列的实际数据类型如何。

此外,这适用于包含 VALUES 子句的单行插入。

于 2011-02-04T05:25:03.103 回答
1

对于那些在获取生成的自动增量 id 时遇到问题的人,就像我以前在 Java Derby 中一样,我的回答可能会有所帮助。

stmt.executeUpdate("INSERT INTO xx(Name) VALUES ('Joe')", Statement.RETURN_GENERATED_KEYS);

ResultSet rs = stmt.getGeneratedKeys();
if (rs.next()) {
  int autoKey = rs.getInt(1); //this is the auto-generated key for your use
} 

从这里复制的答案

于 2019-09-24T01:53:02.290 回答