Ale*_*ioc 5 sqlite android android-room
使用房间数据库,我从不同DELETE的.INSERTDAO's
我将交易用作:
myDb.runInTransaction(new Runnable() {
@Override
public void run() {
}
});
Run Code Online (Sandbox Code Playgroud)
有没有办法ROLLBACK万一出现任何问题?
稍后编辑: 使用这种模式似乎有效:
myDb.beginTransaction();
if(success){
myDb.setTransactionSuccessful(); -> commit
}
myDb.endTransaction();
Run Code Online (Sandbox Code Playgroud)
如果发生异常,事务不会被设置为成功,这意味着事务结束时会回滚。这是代码runInTransaction():
public void runInTransaction(Runnable body) {
beginTransaction();
try {
body.run();
setTransactionSuccessful();
} finally {
endTransaction();
}
}
Run Code Online (Sandbox Code Playgroud)
因此,您可以按照以下方式创建一些内容:
try {
myDb.runInTransaction(new Runnable() {
@Override
public void run() {
// DELETE
if (failed) {
throw new Exception("failed"); // ROLLBACK
}
// INSERT
}
});
} catch (Exception ex) {
// Error handling
}
Run Code Online (Sandbox Code Playgroud)
由于Runnable代码是同步调用的。
而且,如果代码使用 lambda 而不是Runnable匿名类,它看起来会更干净。:)
| 归档时间: |
|
| 查看次数: |
7334 次 |
| 最近记录: |