javaからpostgresqlデータベースにデータを挿入しています。私はjdbc postgresqlドライバを使って接続しています。私はステートメントのバッチを作成し、一度に挿入するために送信しています。しかし、接続が失われた場合、javaは接続プーリングを使用してデータベースに再度接続しようとします。バッチを再度実行しようとしましたが、レコードは挿入されませんでした。例外後にjdbcバッチステートメントを保持する
PreparedStatement pstmt = connection.prepareStatement(INSERT_RECORD_TABLE_SQL);
while (iterator.hasNext()) {
pstmt.setLong(1, toLong(fields[0]));
pstmt.setLong(2, toLong(fields[1]));
....
pstmt.addBatch();
}
try{
pstmt.executeBatch();
} catch (Exception e) {
Thread.sleep(60000);
pstmt.executeBatch();
}
私の質問は何ですか?例外が発生した場合に実行可能なステートメントのバッチは保持できますか?
おかげで、
Saurabh Gupta氏
私はBatchUpdateExceptionを使用していますが、間違っていると言いました。私は再びデータベースに再接続するようにスレッドをスリープ状態にします。バッチをもう一度実行しないと、データが失われます。私が間違っている場合、preparedStatement.executeBatch()はバッチ全体を2つ以上の文ではなく1つのトランザクションとして更新します。だから私は同じバッチを再度挿入するように再試行したい。 – Saurabh
これは使用しているJavaのバージョンによって異なります。 _ "Java 2 SDK、Standard Edition、バージョン1.3では、BatchUpdateExceptionオブジェクトがスローされた後にバッチ更新でコマンドを処理し続けるオプションに対応するため、実装および戻り値が変更されています。 – vulkanino