[英]How to insert bulk data in android sqlite database using ormlite efficiently
我試圖一次在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數據庫以供離線使用。
我正在尋找一種有效的方法來解決這個問題。
任何想法?
我試圖一次在android sqlite數據庫中插入100000條記錄......平均而言,它們需要140秒才能占用60-65%的CPU,這在我看來並不合適。
不幸的是,我沒有一個簡單的答案。 您可能必須使用原始SQL直接執行此類插入,以在有限的Android CPU上實現更快的性能。 插入數據后,您可以轉向ORMLite
以更快地查詢或操作數據。
我遇到了同樣的問題,並找到了合理的解決方法。 插入時間從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();
}
人力資源管理。 好主意@FarrukhNajmi。 我剛把它添加到主干。 它將在4.49版本中。
@Gray它還不穩定嗎? 我們什么時候能在maven看到它?
如果com.j256.ormlite.dao.ForeignCollection #addAll只做一個請求,它也會很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.