2012-10-22 42 views
2

我使用ORMLite来管理我的数据库在我的Android应用程序,它一直工作得很好。有时候,当我尝试更新数据时,我会得到一个包含约束约束的异常。这个例外帮助我追溯到我拨打callBatchTasks()的地方。CallBatchTasks(来自ORMLite)是否在单独的线程中运行?

这实际上是在这一点上的一系列3个电话。第一次调用2更新Table1和Table2。最后一次调用更新一个表(表3),该表用于指定Table1和Table2之间的关系(因此具有约束)。这是得到例外的那个。

table1Dao.callBatchTasks(table1task); 
table2Dao.callBatchTasks(table2task); 
table3Dao.callBatchTasks(table3task); // Exception here 

由于任务执行callable我想每个都在一个单独的线程上运行。所以如果table3任务超过其他任何一个,它会遇到一个约束问题。这是真的?如果是这样,建议的解决方法是什么,以便它们按顺序执行?

回答

3

听起来像你解决了你的问题,但我想我会回答更多的信息。

Dao.callBatchTasks(...)与线程无关。所有ORMLite类的源都可以通过源代码jar或在线获得。看着它通过给StatementExecutor.callBatchTasks(...)调用source for BaseDaoImpl.callBatchTasks(...),它:

  1. 关闭自动提交(使用的是Android交易)
  2. 呼叫传递中作为参数callbatchTasks(...)
  3. 恢复汽车的Callable.call()方法 - 提交(关闭安卓交易)
+1

这就是我想的(在找出我的问题后)。无论如何,谢谢你的回应!我将它标记为答案,因为它实际上回答了问题 – compuguru

0

没关系,我发现了这个问题。这是一个线程化的东西,但它在我的逻辑中。两个调用相同更新任务的调用正在紧挨着,创建2个线程。当其他人已经拥有时,会尝试将其插入表3中,这会导致错误。

看起来好像callBatchTasks不会在它自己的线程中运行,因为当我修复该问题时,它解决了错误。

相关问题