2

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 を使用しています。

4

1 に答える 1

0

PreparedStatement オブジェクト、つまり PreparedStatementInsert1.addBatch()、PreparedStatementInsert2.addBatch() で addBatch() メソッドを使用する必要があります。

次に、PreparedStatementInsert.executeBatch(); を使用する必要があります。

于 2013-07-10T15:17:13.240 に答える