我正在使用 JDBC 连接到 Java DB 数据库,并且想要检索插入的最后一条记录的 id(自动递增)。
我看到这是一个常见问题,但我看到使用例如 MS SQL Server 的 解决方案,Java DB 的等价物是什么?
我正在使用 JDBC 连接到 Java DB 数据库,并且想要检索插入的最后一条记录的 id(自动递增)。
我看到这是一个常见问题,但我看到使用例如 MS SQL Server 的 解决方案,Java DB 的等价物是什么?
无需为此使用特定于 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);
您可以使用 IDENTITY_VAL_LOCAL 函数获得所需的内容。(德比参考)
该函数应该返回“最近为连接分配的标识列的值,其中分配是由于使用 VALUES 子句的单行 INSERT 语句而发生的”。
值得注意的是,该函数将返回 DECIMAL(31,0),而不管相应标识列的实际数据类型如何。
此外,这仅适用于包含 VALUES 子句的单行插入。
对于那些在获取生成的自动增量 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
}
从这里复制的答案