2

我正在使用 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 数据库。

4

1 回答 1

0

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

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

于 2013-07-10T15:17:13.240 回答