我试图一次在 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 数据库以供离线使用。
我正在寻找一种有效的方法来解决这个问题。
任何想法?