我有嵌套事务的代码
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命令。内容不是 实际上在磁盘上提交,直到最外面的事务 提交。
似乎
但是,如果,
答案 0 :(得分:1)
如果被调用的方法失败,您可以抛出异常,因此调用的方法会出现错误并且" parent"交易也会回滚。
通过抛出异常,你强制一个错误,然后将错误传回给调用者,调用者在try catch块中处理它。