繁体   English   中英

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

[英]Behaviour of Prepared Statement Batch when Exception occurs

我正在使用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();。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM