我正在使用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数据库。
答案 0 :(得分:0)
你必须在PreparedStatement对象中使用addBatch()方法,即PreparedStatementInsert1.addBatch(), PreparedStatementInsert2.addBatch() .. PreparedStatementInsertN.addBatch()
然后你必须使用 PreparedStatementInsert.executeBatch();