【问题标题】:SQLite Execute Batch with Connection Commit JavaSQLite 使用连接提交 Java 执行批处理
【发布时间】:2015-02-21 04:46:22
【问题描述】:

我对 Java Execute Batch 函数有疑问。

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

将其放入代码中:

结果是否在这里:

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

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

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

【问题讨论】:

    标签: java sql transactions


    【解决方案1】:

    如果您的批次失败,则该批次的所有语句都将回滚。 好像

    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
    

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

    【讨论】:

    • 如果是这种情况,从互联网上的许多示例来看,如果我上面的两个示例都将回滚,那么将自动提交设置为 false 然后在批处理完全执行后提交的理由是什么一项失败?
    猜你喜欢
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多