当事务方法在sqlite中使用事务调用另一个方法时会发生什么?

时间:2013-10-30 00:02:01

标签: java android sqlite transactions

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

1 个答案:

答案 0 :(得分:0)

documentation说:

  

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