我在 android 中有一个应用程序,它使用 sqlite 来持久化数据。
如果您从启动另一个事务的其他方法(如示例)调用启动事务的方法是否正确?这两笔交易发生了什么?
@Override
public void saveSurvApplied(MSurvey surv, MSApplied sa) {
try {
db.beginTransaction();
SurveyManager surveyManager = ManagerFactory.getSurveyManager(ctx);
surveyManager.saveSurveyState(surv); // it begins a transaction
saDao.save(sa);
db.setTransactionSuccessful();
} catch (SQLException ex) {
Log.e(tag, "Error insertando las encuestas aplicadas", ex);
} finally {
db.endTransaction();
}
}
...
SurveyManagerImpl.java
@Override
public void saveSurveyState(MSurvey survey) {
try {
db.beginTransaction();
for (MNode node : survey.getNodes()) {
nodeDao.update(node);
MItem[] items = node.getItems();
if (items != null) {
for (MItem item : items) {
itemDao.update(item);
}
}
}
surveyDao.update(survey);
db.setTransactionSuccessful();
} catch (SQLException ex) {
Log.e(tag, "Error actualizando la encuesta", ex);
} finally {
db.endTransaction();
}
}
我可以提供一些参考来了解在 sqlite 中调用嵌套事务时会发生什么吗?谢谢你。