我有嵌套事务的代码
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