9

TestingIDのJavaコードには、次のような変数とSQL文字列があります。SQL 文字列は後で に使用されprepareStatementます。

 int TestingID; 

 String sqlInsert = "INSERT INTO TESTING VALUES(TESTING_SEQ.NEXTVAL, ?, ?)";  
 ...  

 MethodA(TestingID);     //passing TestingID to MethodA

TestingID上記のように、別のメソッドで使用できるように、新しく挿入されたレコードの次のシーケンス値を に取得する必要があります。

4

4 に答える 4

32

そのアプローチを使用することにより、最初に新しい ID 値を照会する必要があります (シーケンスを使用しているようです)。これは、select を発行することで実行できます。

// This example is for Oracle

String sqlIdentifier = "select TESTING_SEQ.NEXTVAL from dual";
PreparedStatement pst = conn.prepareStatement(sqlIdentifier);
synchronized( this ) {
   ResultSet rs = pst.executeQuery();
   if(rs.next())
     long myId = rs.getLong(1);

その後、引数として PreparedStatement に渡します。

...
String sqlInsert = "INSERT INTO TESTING VALUES(?, ?, ?)";
PreparedStatement pst = conn.prepareStaetment(sqlInsert);
pst.setLong(1, myId);
...

その時点から、常にシーケンス番号を取得できます。

これらは機能的な例ではありません (no catch または finally など) が、それを行う方法のアイデアを提供します ;)

于 2013-08-01T19:09:35.490 に答える
0

Oracleでは、使用できます

long myId = rs.getLong("NEXTVAL");

これは HSQL では失敗します。「as NEXTVAL」を追加することで、SQL ステートメントを変更できます。

String sqlIdentifier = "select TESTING_SEQ.NEXTVAL as NEXTVAL from dual";
于 2014-01-21T16:40:34.373 に答える