检索刚插入Java DB(Derby)数据库的记录的id

时间:2011-02-04 05:02:49

标签: sql jdbc javadb

我使用JDBC连接到Java DB数据库,并希望检索插入的最后一条记录的id(自动增量)。

我认为这是一个常见问题,但我看到solutions使用的是MS SQL Server,Java DB的等价物是什么?

3 个答案:

答案 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复制的答案