如何使用Dao.setAutoCommit()?(How to use Dao.setAutoCom

2019-09-17 03:54发布

我是从一台服务器解析JSON,使用ORMLite因为我读出来坚持对象到数据库。 这些文件可以得到非常大的,所以我的想法是因为他们正在阅读将对象提交一次一个,而不是读取上百个对象到内存中,并做了质量承诺(内存为智能手机稀少,毕竟)。 然而,每个对象将包含多个值的集合(我尝试使用ForeignCollection这些值,所以每个值需要被当作一个单独的对象),并认为这将是更好地犯的一个对象的集合中的所有项目一次,而不是承诺,说,每个个体字符串或整数。

我认为,做一团提交的批处理,我会简单地调用dao.setAutoCommit(false) ,调用dao.create()对每个项目,调用dao.commit()之后,然后调用dao.setAutoCommit(true)回到零碎的提交。

我有三个问题:

  1. 那么,是否可以承诺,因为我去,或者我到一批应提交 - 即使这意味着高达上千元的对象会立即得到承诺?
  2. 它是更好地提交项目之一的集合的时间,或者在批处理?
  3. 我在哪里得到databaseConnection从该值dao.setAutoCommit()dao.commit()要求? 也许我错过了,但文档或例子中我找不到它。

Answer 1:

那么,是否可以承诺,因为我去,或者我到一批应提交 - 即使这意味着高达上千元的对象会立即得到承诺?

如果你有大量的项目可能会更好一次,而不是1000犯下了几个100个的对象。 这在很大程度上取决于所以用各种不同批量运行它,并定时他们将尝试好事对象的大小。 至于你提到,你需要平衡存储和数据库性能。 我很好奇的结果,所以请与您的时序数据的注释。

它是更好地提交项目之一的集合的时间,或者在批处理?

当然是更好的做事情的一个批次。 这只是我工作过的每一个数据库的真实。

如果你是在谈论一个外国收集,然后真的是有对象的国外收集和要创建对象的大名单没有任何区别。 双方将受益于配料。

每个外部对象的创建后,我不会承诺。 我宁愿批量达100(比方说)外的物体和任何相关的异物他们。 然后提交了100的变化,做下100。然后改变100到200,然后尝试50,等等。你应该看到拐点。

难道我回答这个问题吧?

我在哪里得到的值的DatabaseConnection dao.setAutoCommit()dao.commit()要求? 也许我错过了,但文档或例子中我找不到它。

编辑#2:

作为@Chad指出的,我错了采用Android下自动提交建议。 通过启动交易,完成后提交它虽然sqlite的驱动程序通常支持自动提交。 安卓似乎并不不过来支持这一点。 在Android数据库连接,该代码是一个空操作。

在Android上,做批任务,ORMLite的正确方法是使用dao.callBatchTasks(Callable)方法来代替。 就像是:

accountDao.callBatchTasks(connectionSource,
  new Callable<Void>() {
    public Void call() throws SQLException {
        // insert a number of accounts at once
        for (Account account : accountsToInsert) {
           // update our account object
           accountDao.create(account);
        }
        return null;
    }
});


文章来源: How to use Dao.setAutoCommit()?