我使用JDBC连接到Java DB数据库,并希望检索插入的最后一条记录的id(自动增量)。
我认为这是一个常见问题,但我看到solutions使用的是MS SQL Server,Java DB的等价物是什么?
答案 0 :(得分:22)
无需为此使用特定于DBMS的SQL。
这就是getGeneratedKeys()的用途。
当preparing your statement传递自动生成列的名称时,您可以使用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);
答案 1 :(得分:2)
您可以使用IDENTITY_VAL_LOCAL函数获取您要查找的内容。 (Derby Reference)
此函数应返回“最近为连接分配的标识列值,其中赋值是由使用VALUES子句的单行INSERT语句而发生的。”
值得注意的是,无论相应标识列的实际数据类型如何,此函数都将返回DECIMAL(31,0)。
此外,此仅适用于包含VALUES子句的单行插入。
答案 2 :(得分:0)
对于那些像我以前在Java Derby中那样在获取生成的自动增量ID方面遇到问题的人,我的答案可能会有所帮助。
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
}
从here复制的答案