我正在使用Java Prepared Statements Batch将多个行插入数据库中。有时在批处理中有两个具有相同主键值的相同插入语句,这会引发异常,这是正常的。我的问题是在异常之前插入的数据会怎样?应该插入(提交)还是触发回滚?我找不到与此有关的任何文档。

我已经对一批相同的两个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。从文档中我得出结论,一个(第一个)INSERT成功完成,而第二个则没有成功。但是,当我查看数据库时,它是空的,好像没有完成INSERT一样。
是否有一些文档或对此行为的解释?
我正在将Java 6与Postgres 9.0数据库一起使用。

最佳答案

您必须对您的PreparedStatement对象使用addBatch()方法,即PreparedStatementInsert1.addBatch(),
PreparedStatementInsert2.addBatch()
..
PreparedStatementInsertN.addBatch()

那你得用
PreparedStatementInsert.executeBatch();

09-05 16:57