由於Yuku和Brett提到的InsertHelper現在是deprecated(API等級17),似乎r Google推薦使用SQLiteStatement。
我使用的數據庫插入方法是這樣的:
database.insert(table, null, values);
後,我也經歷了一些嚴重的性能問題,下面的代碼加快我500個插入了從14.5秒只270毫秒,令人驚歎!
這是我如何使用SQLiteStatement:
private void insertTestData() {
String sql = "insert into producttable (name, description, price, stock_available) values (?, ?, ?, ?);";
dbHandler.getWritableDatabase();
database.beginTransaction();
SQLiteStatement stmt = database.compileStatement(sql);
for (int i = 0; i < NUMBER_OF_ROWS; i++) {
//generate some values
stmt.bindString(1, randomName);
stmt.bindString(2, randomDescription);
stmt.bindDouble(3, randomPrice);
stmt.bindLong(4, randomNumber);
long entryID = stmt.executeInsert();
stmt.clearBindings();
}
database.setTransactionSuccessful();
database.endTransaction();
dbHandler.close();
}
插入這樣所有ContentValues只需要一兩秒鐘。非常感謝! – benvd 2010-08-17 13:00:10
打開一個長時間運行的事務是否安全,覆蓋整個XML解析操作的持續時間,然後在最後提交它?或者應該將插入列表本地緩存到XML解析器中,然後在解析完成後打開並提交一個短期事務? – 2011-01-24 11:43:04
用交易包裝我的60插入增加了10倍的性能。用一個事務包裝它,並使用準備好的語句(SQLiteStatement)將其增加20倍! – stefs 2011-04-07 13:57:53