java - SQLite 使用连接提交批处理 Java

标签 java sql transactions

我对 Java 执行批处理功能有疑问。

例如:我在批处理中添加了 10 个插入进程,然后执行该批处理。如果失败,是否有一些插入过程成功执行并提交?这意味着自动提交会发生在批处理中的任何插入过程中?或者如果一个进程失败,则整批插入将不会发生。

将其放入代码中:

结果在这里吗:

con.setAutoCommit(false);
....
statement.addBatch();
....
statement.executeBatch();
....
con.commit();

等于这个(如果执行批处理失败!!)

....
statement.addBatch();
....
statement.executeBatch();

最佳答案

如果您的批处理失败,则该批处理的所有语句都将回滚。 看起来像

begin transaction
insert into t1(f1,f2) values(1,2) 
insert into t1(f1,f2) values(2,3)
insert into t1(f1,f2) values(3,4) -- fail here
insert into t1(f1,f2) values(4,5)
commit

在这种情况下,所有语句都将回滚,第一个语句和第二个语句都将回滚。

UPD1

当你使用自动提交时,它看起来像

begin transaction
insert into t1(f1,f2) values(1,2) 
commit
begin transaction
insert into t1(f1,f2) values(2,3)
commit
begin transaction
insert into t1(f1,f2) values(3,4) -- fail here
commit
begin transaction
insert into t1(f1,f2) values(4,5)
commit

在这种情况下,将提交第一条、第二条和第四条语句。

关于java - SQLite 使用连接提交批处理 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28642191/

相关文章:

java - JPA/@PostPersist @PostUpdate - 交易

java - Spring - 事务只读

java - @Transactional 的自定义快捷方式注释不起作用

java - 如何使用java在android studio应用程序中由多个注册用户访问Firebase Firestore集合?

java - 从行边距中选择行 - mouseDragged 事件跟不上选择处理

sql - 子查询中的 COALESCE 仍然返回 DBnull

sql - 从 View 中的字符串转换日期和/或时间时转换失败

java - clone() 的用例

java - 解析SQL并替换Java中的参数

sql - 如何为相同的值获取相同的行号()