我对 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/