我正在使用JDBC连接Java DB数据库,并希望检索最后插入的记录的id(它是自动递增的)。
我发现这是一个常见的问题,但我看到解决方案,例如使用MS SQL Server,那么在Java DB中等价的是什么?
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
new String[] { "ID_COLUMN"}
与 new String[] { "id_column"}
不同。
或者你也可以使用:
connection.prepareStatement("INSERT ...", PreparedStatement.RETURN_GENERATED_KEYS);
对于那些像我一样在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
}
答案从这里复制而来。
getGeneratedKeys()
获取列值之间执行了多个插入语句,它是否仍会返回预期的自动生成的列值? - Akash AgarwalPreparedStatement
中使用PreparedStatement.RETURN_GENERATED_KEYS
而不是字符串数组作为第二个参数来解决了问题。(如果有人想知道,我非常确定我的问题不是打字错误)。 - Alexnew String[] { "ID"}
与new String[] { "id"}
不同。 - user330315