2011-05-21 122 views
2

可能重复:
PLSQL JDBC: How to get last row ID?如何从Oracle数据库中获取自动递增的PK?

我实现了一个触发器和自动递增的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(); 

但它不起作用。

+0

我敢肯定你需要试图让前执行该语句生成的密钥。 – Mat 2011-05-21 18:37:30

+0

抱歉,这是错误的,我忘了在这里写下我的问题。在我的代码中,该语句已经执行并且不起作用。 – djihad 2011-05-21 18:44:47

回答

0

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

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()); 

这里更多:Retrieve the generated keys (JDBC Oracle)