12

INSERTを使用して複数の行を作成したいPreparedStatement

ps = con.prepareStatement(query,PreparedStatement.RETURN_GENERATED_KEYS);

for(Element e:listOfElements){
    ps.setString(1,this.col_val_1);
    ps.setString(2,this.col_val_2);
    ps.setInt(3,this.col_val_3);

    ps.addBatch();
}

ps.executeBatch();
ResultSet rs = ps.getGeneratedKeys();

この時点で、それぞれに対して生成されたPKを取得することを期待すると、次のINSERTようになりますSQLServerException

com.microsoft.sqlserver.jdbc.SQLServerException: The statement must be executed before any results can be obtained.

実行された挿入ごとに1行のResultSetを取得することを期待していたので、各PKを生成できました。

私は間違っていると思っていますか?私は何か間違ったことをしていますか?バッチ実行を使用して別の方法で実行できますか?

4

1 に答える 1

10

バッチ実行のサポートはgetGeneratedKeys()、JDBC仕様に従って定義された実装です。ほとんどの場合、SQLServerドライバーはバッチ実行をサポートしていません。

Microsoftサイトで明示的なステートメントを探しようとしましたが、見つかりませんでした。MSDNのこの古い(2007)フォーラムの投稿には、サポートされていないと記載されています:http ://social.msdn.microsoft.com/Forums/en-US/sqldataaccess/thread/6cbf5eea-e5b9-4519-8e86-f4b65ce3f8e1

于 2012-11-30T09:42:51.823 に答える