使用ForeignCollectionField创建ORMlite对象

时间:2014-08-28 13:24:54

标签: java android ormlite

我是Ormlite集成的新手,但设法使其适用于学习项目(Android应用程序)

我面临的问题是表演+概念问题。

我使用Jackson获取Center对象列表,然后使用ORMLite将所有内容保存到DB中。

My Center对象有两个ForeignCollectionField,我的注释是正确的,使用上面的代码我可以得到一个正确的" join"这个中心可以处理的废物和它自己的中心的性质。

我可以使用sqlite编辑器检查我的数据库,看起来很好。

问题是用4000个对象填充数据库需要大约8mn,这有点长。

以下是我的asyncTask中使用的代码的一部分(此代码效果很好)

Center[] c = new Center[0];
//fill c with Center objects from jackson OK
assert pCenterDao != null;

for(final Center center : c) {
    try {
        pCenterDao.create(center);

        for (CenterTypesItem typesItem : center.getCenterTypesCollection()) {
            CenterTypesItem centerTypesItem = new CenterTypesItem(typesItem.getId(),center);
            pCenterTypesItemDao.createOrUpdate(centerTypesItem);
        }

        for (CenterWastesItem wastesItem : center.getWastesCollection()) {
            CenterWastesItem centerWasteItem = new CenterWastesItem(wastesItem.getId(),center);
            pCenterWastesItemDao.createOrUpdate(centerWasteItem);
        }

        count = pCenterDao.countOf();
        publishProgress(count, Long.valueOf(c.length));

    } catch (SQLException e) {
        e.printStackTrace();
        result = false ;
    }

    if (isCancelled()){
        result = false ;
        break;
    }
}

正如你所看到的,我在主循环中有两个FOR循环(不是很聪明),你能告诉我如何优化和纠正这个问题。 @Gray请帮助:) 谢谢

1 个答案:

答案 0 :(得分:1)

你应该使用callBatchTasks方法。它可以提高速度。

你在这里有一个很好的解释:

ORMLite's createOrUpdate seems slow - what is normal speed?

这是一个很好的例子:

Android ORMLite slow create object