2011-05-21 61 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)

相關問題