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