2013-01-15 42 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