Android 如何使用Dao.setAutoCommit()?
我从服务器解析JSON,在读取对象时使用ORMLite将对象持久化到数据库。文件可能会变得非常大,因此我的想法是在读取对象时一次提交一个对象,而不是将数百个对象读入内存并进行大规模提交(毕竟,智能手机上的内存非常有限)。但是,每个对象都将包含一个具有多个值的集合(我试图对这些值使用Android 如何使用Dao.setAutoCommit()?,android,ormlite,Android,Ormlite,我从服务器解析JSON,在读取对象时使用ORMLite将对象持久化到数据库。文件可能会变得非常大,因此我的想法是在读取对象时一次提交一个对象,而不是将数百个对象读入内存并进行大规模提交(毕竟,智能手机上的内存非常有限)。但是,每个对象都将包含一个具有多个值的集合(我试图对这些值使用ForeignCollection,因此每个值都需要被视为一个单独的对象),并且认为最好一次提交对象集合中的所有项,而不是提交,例如,每个单独的字符串或整数 我相信要在批处理中进行一组提交,我只需调用dao.setAu
ForeignCollection
,因此每个值都需要被视为一个单独的对象),并且认为最好一次提交对象集合中的所有项,而不是提交,例如,每个单独的字符串或整数
我相信要在批处理中进行一组提交,我只需调用dao.setAutoCommit(false)
,调用dao.create()
,为每个项目调用dao.commit()
,然后调用dao.setAutoCommit(true)
,返回到逐段提交
我有三个问题:
dao.setAutoCommit()
和dao.commit()
所需的databaseConnection
值的哪里获取?也许我错过了,但在文档或示例中找不到dao.setAutoCommit()
和dao.commit()
请求的数据库连接值从何处获取?也许我错过了,但在文档或示例中找不到
编辑#2:
正如@Chad所指出的,我建议在Android下使用自动提交是错误的。尽管Sqlite驱动程序通常通过启动事务并在完成时提交来支持自动提交。然而,Android似乎并不支持这一点。在Android数据库连接中,代码是禁止操作的
在Android下,使用ORMLite执行批处理任务的正确方法是使用。比如:
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;
}
});
accountDao.callBatchTasks(connectionSource,
新的可调用(){
public Void call()引发SQLException{
//一次插入多个帐户
对于(帐户:accountsToInsert){
//更新我们的帐户对象
accountDao.create(account);
}
返回null;
}
});
Ah。。。因此,如果我无法扩展OrmLiteBaseActivity,我可以使用:DatabaseHelper DatabaseHelper=OpenHelperManager.getHelper(上下文,DatabaseHelper.class);DatabaseConnection connection=databaseHelper.getConnectionSource().getReadWriteConnection();setAutoCommit(连接,false);感谢您的大力支持!取消那个@Chad。我已使用setAutoCommit()
的正确方法编辑了我的答案。脑屁!