由于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