如何从Oracle数据库中获取自动递增的PK?

可能重复:
PLSQL JDBC:如何获取最后一行ID?

我已经实现了一个自动递增PK的触发器和序列,我使用Oracle 10g作为数据库。 现在我想使用JAVA插入一些东西,但我需要在INSERT之后立即将增加的PK保存在变量中。 我试过这个:

PreparedStatement pstmt = connection.prepareStatement("INSERT INTO sometable VALUES(?, ?)", Statement.RETURN_GENERATED_KEYS); pstmt.setInt(1, 5); pstmt.setString(2, "Username"); pstmt.executeUpdate(); ResultSet resultSet = pstmt.getGeneratedKeys(); 

但它不起作用。

您需要指定要检索的可能生成的键。

 PreparedStatement pstmt = conn.prepareStatement(sql,new String [] {"ID_ORDER"}); 

请注意,列名称区分大小写。 最后需要JDBC 3.0驱动程序和Oracle 10g R2或更高版本。

您可以通过检查DatabaseMetaData来检查当前安装是否支持此机制:

 DatabaseMetaData metaData = conn.getMetaData(); log("SupportsGetGeneratedKeys?="+metaData.supportsGetGeneratedKeys()); 

更多信息: 检索生成的密钥(JDBC Oracle)

customer.getID()是表的候选键吗? 如果是这样,您可以在INSERT之后运行SELECT以查找生成的PK的值。 或者,您可以摆脱触发器,从Java中的DB获取SEQUENCE的下一个值,并将其用作INSERT的PK。 这种方法的缺点是来自其他应用程序的插入也必须这样做。