簡體   English   中英

如何有效地使用ormlite在android sqlite數據庫中插入批量數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM