5

我试图一次在 android sqlite 数据库中插入 100000 条记录。我正在使用以下两种不同的方法。

 private void bulkInsertDataBySavePoint(final List<User> users) {
    log.debug("bulkInsertDataBySavePoint()");
    DatabaseConnection conn = null;
    Savepoint savepoint = null;
    try {
        conn = userDao.startThreadConnection();
        savepoint = conn.setSavePoint("bulk_insert");
        for (User user : users) {
            userDao.create(user);
        }
    } catch (SQLException e) {
        log.error("Something went wrong in bulk Insert", e);
    } finally {
        if (conn != null) {
            try {
                conn.commit(savepoint);
                userDao.endThreadConnection(conn);
            } catch (SQLException e) {
                log.error("Something went wrong in bulk Insert", e);
            }
        }
    }
}

   private void bulkInsertDataByCallBatchTasks(final List<User> users) {
    log.debug("bulkInsertDataByCallBatchTasks()");
    try {
        userDao.callBatchTasks(new Callable<Void>() {
            @Override
            public Void call() throws Exception {
                for (User user : users) {
                    userDao.create(user);
                }
                return null;
            }
        });
    } catch (Exception e) {
        e.printStackTrace();
    }
}

两种方法都可以正常工作。平均而言,它们需要 140 秒并占用 60-65% 的 CPU,我认为这是不行的。

这个想法是,我必须使用一个提供 json 数据的 api。我必须解析该 json 数据,然后插入 sqlite 数据库以供离线使用。

我正在寻找一种有效的方法来解决这个问题。

任何想法?

4

3 回答 3

5

我试图一次在 android sqlite 数据库中插入 100000 条记录......平均而言,它们需要 140 秒并占用 60-65% 的 CPU,这在我看来是不行的。

不幸的是,我没有一个简单的答案给你。您可能必须直接使用原始 SQL 进行此类插入,以在有限的 Android CPU 上实现更快的性能。插入数据后,您可以ORMLite更快地查询或操作数据。

于 2013-07-16T14:22:26.140 回答
3

我遇到了同样的问题,并找到了合理的解决方法。这需要从 2 秒到 150 毫秒的插入时间:

final OrmLiteSqliteOpenHelper myDbHelper = ...;
final SQLiteDatabase db = myDbHelper.getWritableDatabase();
db.beginTransaction();
try{
    // do ormlite stuff as usual, no callBatchTasks() needed

    db.setTransactionSuccessful();
}
finally {
    db.endTransaction();
}
于 2014-12-05T11:56:34.757 回答
1

人力资源管理系统。好主意@FarrukhNajmi。我刚刚将它添加到主干。它将在版本 4.49 中。

@Gray 它仍然不稳定吗?我们什么时候可以在 Maven 中看到它?

如果 com.j256.ormlite.dao.ForeignCollection#addAll 只提出一个请求,那也很好。

于 2014-10-23T19:49:38.470 回答