2013-10-30 41 views
0

我有一個應用程序在Android中使用SQLite來保存數據。當事務方法在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中調用嵌套事務會發生什麼? 謝謝。

回答

0

documentation說:

交易可以被嵌套。當外部事務結束時,在該事務中完成的所有工作和所有嵌套事務將被提交或回滾。

相關問題