OrmLite:Dao.callBatchTasks()和TransactionManager.callInTransaction()之间的区别

时间:2015-02-20 11:06:01

标签: java android transactions ormlite

这些方法有什么区别?我已经阅读了文档,但我不明白callBatchTasks方法的作用。文档说:

  

这将关闭数据库调用"自动提交"模式,运行   可调用然后重新启用"自动提交"。

这是一笔交易吗?

感谢。

1 个答案:

答案 0 :(得分:6)

  

Dao.callBatchTasks()TransactionManager.callInTransaction()

之间的差异

差异取决于您使用的数据库。在Android下,没有区别。 callBatchTasks(...)的javadoc说:

  

调用将执行许多批处理任务的可调用程序。当您想要一次运行多个数据库操作时,这是为了提高性能 - 可能是从文件加载数据。这将关闭数据库调用“自动提交”模式,运行可调用,然后重新启用“自动提交”。如果不支持自动提交,则将使用事务。

Android的SQLite是其中一个数据库。在内部ORMLite代码中,您会看到:

private <CT> CT doCallBatchTasks(DatabaseConnection connection, boolean saved,
        Callable<CT> callable) throws SQLException {
    if (databaseType.isBatchUseTransaction()) {
        return TransactionManager.callInTransaction(connection, saved, databaseType,
            callable);
    }
    ...

在内部,在Android下使用时,dao.callBatchTasks(...)是对TransactionManager.callInTransaction(...)的调用。