发生异常时准备语句批处理的行为

时间:2013-07-10 14:02:49

标签: java jdbc batch-processing

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

我在一批中完成了两个相同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块并且插入数组插入了一个元素[0] = 1.从文档中我得出结论,一个(第一个)INSERT成功完成,第二个INSERT成功完成不是。但是当我查看数据库时,它就像没有INSERT那样是空的。 是否有一些这种行为的文档或解释? 我正在使用Java 6和Postgres 9.0数据库。

1 个答案:

答案 0 :(得分:0)

你必须在PreparedStatement对象中使用addBatch()方法,即PreparedStatementInsert1.addBatch(), PreparedStatementInsert2.addBatch() .. PreparedStatementInsertN.addBatch()

然后你必须使用 PreparedStatementInsert.executeBatch();