android - callBatchTasks(来自 ORMLite)是否在单独的线程中运行?

标签 android ormlite

我正在使用ORMLite在我的 Android 应用程序上管理我的数据库,它运行得很好。但有时,当我尝试更新数据时,我会收到包含约束的异常。这个异常帮助我追踪到我打电话的地方 callBatchTasks() .

此时实际上是一系列 3 个调用。第一个调用 2 更新 Table1 和 Table2。最后一次调用更新用于指定 Table1 和 Table2 之间的关系(因此具有约束)的表 (Table3)。这是获得异常的一个。

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

由于任务实现了可调用,我认为每个任务都在单独的线程上运行。因此,如果 table3task 领先于其他任务,它就会遇到约束问题。这是真的?如果是这样,建议的解决方法是什么,以便它们按顺序执行?

最佳答案

听起来您已经解决了问题,但我想我应该提供更多信息来回答。

Dao.callBatchTasks(...) 与线程无关。全部来源ORMLite类可以通过源 jar 或在线获取。看着source for BaseDaoImpl.callBatchTasks(...)调用 StatementExecutor.callBatchTasks(...) ,它:

  1. 关闭自动提交(使用 Android 事务)
  2. 调用作为参数传入 callbatchTasks(...)Callable.call() 方法
  3. 恢复自动提交(关闭 Android 事务)

关于android - callBatchTasks(来自 ORMLite)是否在单独的线程中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13021285/

相关文章:

java - 启用proguard时androidTest中没有静态方法deleteRecursively(Ljava/io/File;)

android - 以编程方式关闭 Android 手机

java - 强制使用 ORMLite for Java 的事务

android - ormlite:sql语句不像抛出异常

c# - 无法检测到 webview Appium

带有透明工具栏的Android DrawerLayout

android - SDK 5.0 RecyclerView 无法实例化

android - 从我的 Activity 中隐藏 DataBaseHelper 和 DAO

android - 如何将 ORMLite 导入到我的 Android 项目中?

java - 在 Android 中使用 ORMLite 持久化 ArrayList<String>