2012-07-04 43 views
1

我有一種情況,我必須在數據庫中插入數據,並且數據非常大,這是在ArrayList。該數據被插入在一個循環是這樣的:如何加快在Android應用程序中的數據庫(SQLite)中的大數據插入

for(.....) 
ContentValues cv = new ContentValues(); 

// cv.put statements 

sqLiteDB.insert ...... 

現在大約需要1分鐘以上的測試用例,並有望超過10分鐘的真實數據,而目標是保持低於30時秒。數據不能減少。我的問題是:

  1. 如何提高速度
  2. 有沒有一種方法,以避免重複調用sqLiteDB.insert功能,做所有行的插入在一個批次?

回答

3

一個在你的情況可能速度的提高是有這樣的代碼:

ContentValues cv = new ContentValues(); 
for(....) { 
    //cv put 
    sqLiteDB.insert 
    cv.clear(); 
} 

此外,here是一篇博客文章中如何提高插入速度。

編輯 我也檢查了SO和here是一個類似的問題。據稱使用交易可以提高速度。

1

我還沒有嘗試這個sqlite,但做了類似於mssql的東西。大多數情況下,開/關交易比插入需要更多的時間。所以你可以在一個交易中做所有事情.. 值得去嘗試。

db.beginTransaction(); 
try { 
    SQLiteStatement insert = null; 
    insert = db.compileStatement("INSERT OR REPLACE INTO \"MyTable\" (" 
      + "\"MyColumnName\") VALUES (?)"); 

    for (i = 0; i++; i < 10000) 
    { 
     insert.bindLong(1, i); 
     insert.execute(); 
     insert.clearBindings(); 
    } 

    db.setTransactionSuccessful(); 
} 
catch (Exception e) { 
    String errMsg = (e.getMessage() == null) ? "bulkInsert failed" : e.getMessage(); 
    Log.e("bulkInsert:", errMsg); 
} 
finally { 
    db.endTransaction(); 
} 
相關問題