0

我在 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 中调用嵌套事务时会发生什么吗?谢谢你。

4

1 回答 1

0

文档说:

事务可以嵌套。当外部事务结束时,该事务中完成的所有工作和所有嵌套事务都将被提交或回滚。

于 2013-10-30T08:23:28.343 回答