java 如何从Oracle数据库中获取自动递增的主键?[副本]

8ftvxx2r  于 2023-05-05  发布在  Java
关注(0)|答案(2)|浏览(134)

此问题已在此处有答案

11年前关闭。

可能重复:

PLSQL JDBC: How to get last row 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();

但它不起作用。

odopli94

odopli941#

锁定,本次有disputes about this answer’s content正在解析。它目前不接受新的交互。

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

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

请注意,列名区分大小写。最后,需要JDBC 3.0驱动程序和Oracle 10g R2或更高版本。
您可以通过检查DatabaseMetaData来检查当前安装是否支持此机制:

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

mrwjdhj32#

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

相关问题