2013-01-15 74 views
6

我的應用程序使用遠程REST API並使用greenDao填充本地數據庫。我有一個的AsyncTask類服務:如何將多個greenDAO Tx操作合併爲一個事務?

@Override 
protected Void doInBackground(Void... params) { 
    insert100RowsIntheFirstTable(); 
    insert100RowsIntheSecondTable(); 
} 

內各鑲嵌方法我有insertOrReplaceInTx,我主要使用的性能增益。

我需要的是放棄結果,如果任何方法無法檢索數據。它應該通過同一個事務完成。

我想知道是否正確將我的插入方法調用與mDaoSession.callInTx(callable)包圍在一起,而在方法中有insertOrReplaceInTx。我對嗎?

此外,如何在拋出異常的情況下放棄事務 - 是否通過greenDao自動完成?

回答

9

是使用callInTx如果你的代碼可以拋出一個異常(如果沒有,你也可以考慮runInTx。Android的SQLite的API後,這些「嵌套」的交易服務。

畢竟,callInTx是方便,如果只是一些線條你看看源代碼:

public <V> V callInTx(Callable<V> callable) throws Exception { 
    db.beginTransaction(); 
    try { 
     V result = callable.call(); 
     db.setTransactionSuccessful(); 
     return result; 
    } finally { 
     db.endTransaction(); 
    } 
} 
+0

它一直 - 尼斯 – midnight

+1

如果第一insertInTx成功,第二個出現故障,不會在第一組對象的保留在會話緩存,即使數據庫回滾!交易? – Monstieur