我有嵌套事务的代码

db.beginTransaction();
try {
    deleteCustomer();
    insert_customer_function();

    // No exception throw. Success
    db.setTransactionSuccessful();
} finally {
    db.endTransaction();
}

void insert_customer_function() {
    db.beginTransaction();
    try {
        insertCustomer();
        // Exception throw somehow...
        db.setTransactionSuccessful();
    } catch (Exception ex) {
    } finally {
        db.endTransaction();
    }
}


我想知道,如果嵌套事务deleteCustomer失败,会提交还是回滚insert_customer_function

https://www.sqlite.org/lang_savepoint.html看来


  请注意,内部事务可能会提交(使用RELEASE
  命令),但稍后通过外部的ROLLBACK撤消其工作
  交易。电源故障或程序崩溃或操作系统崩溃将导致
  要回滚的最外部事务,撤消所有具有
  发生在该外部事务中,甚至包括
  据说是由RELEASE命令“提交”的。内容不是
  实际提交到磁盘上,直到最外面的事务
  提交。


看起来


如果外部未提交,甚至内部已提交,则外部和内部都会回滚。


但是如果


如果外部提交但内部未提交,外部和内部都会回滚吗?

最佳答案

如果被调用的方法失败,则可以引发异常,因此被调用的方法会出错,并且“父”事务也将回滚。

通过引发异常,您可以强制执行错误,然后将错误传播回调用方,由调用者在try catch块中进行处理。

快速参考:http://androidcookbook.com/Recipe.seam;jsessionid=0443546CEE776318BF6D21552A9D1864?recipeId=75&recipeFrom=ViewTOC

10-07 19:23
查看更多