如何有效地使用ormlite在android sqlite数据库中插入批量数据

rok*_*oid 5 sqlite android ormlite android-sqlite

我试图一次在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);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

   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();
    }
}
Run Code Online (Sandbox Code Playgroud)

两种方法都很好.平均而言,他们需要140秒才能占用60-65%的CPU,这是不行的.

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

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

任何想法?

Gra*_*ray 5

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

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

  • 人力资源管理.好主意@FarrukhNajmi.我刚把它添加到主干.它将在4.49版本中. (6认同)