如何从Oracle数据库获取自增PK? [重复]

问题描述 投票:0回答:2

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

我已经实现了一个触发器和一个自动递增 PK 的序列,我使用 Oracle 10g 作为数据库。 现在我想使用 JAVA 插入一些东西,但我需要在插入后立即将递增的 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();

但是没用。

java oracle jdbc sequence
2个回答
1
投票

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

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

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

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

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

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.