2011-05-21 10 views
2

可能性の重複:
PLSQL JDBC: How to get last row ID?Oracleデータベースから自動インクリメントされたPKを取得する方法は?

私はデータベースとしてOracle 10gを使用しています、PKをインクリメント自動車のトリガとシーケンスを実施しています。 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

+0

申し訳ありませんが間違いでした、私はここに私の質問の行を書くのを忘れていました。私のコードでは、このステートメントはすでに実行されており、動作しません。 – djihad

答えて

0

customer.getID()はテーブルの候補キーですか?その場合は、INSERTの後にSELECTを実行して、生成されたPKの値を見つけることができます。あるいは、トリガーを取り除いて、SEQUENCEの次の値をJavaのDBから取得し、それを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)

関連する問題