Java Prepared Statements Batch を使用して複数の行をデータベースに挿入しています。バッチ内に、同じ主キー値を持つ 2 つの同一の挿入ステートメントが存在する場合があり、これにより例外がスローされますが、これは正常な動作です。私の質問は、例外の前に挿入されたデータはどうなりますか? 挿入(コミット)する必要がありますか、それともロールバックがトリガーされますか?これに関するドキュメントが見つかりません。
1 つのバッチで 2 つの同一の SQL 挿入を使用していくつかの実験を行いました。これは擬似コードです:
int[] inserted;
PreparedStatement PreparedStatementInsert ... prepared with two identical SQL inserts.
try {
inserted = PreparedStatementInsert.executeBatch();
} catch (BatchUpdateException e) {
// program enters this part
inserted = e.getUpdateCounts();
}
私の実験では、catch ブロックが実行され、挿入された配列には、insert[0] = 1 という 1 つの要素が含まれています。ドキュメントから、1 つ (最初) の INSERT が正常に実行され、2 つ目は成功していないと結論付けました。しかし、データベースを見ると、INSERT が行われていないかのように空です。この動作に関するドキュメントや説明はありますか? Postgres 9.0 データベースで Java 6 を使用しています。