我有大约7000行要插入设备(Android galaxy tab2)的sqlite数据库。目前我正在解析JSON文件并使用“for”循环将行插入数据库。但它需要120多秒才能将数据解析并插入到sqlite数据库中。还有其他更快的方法吗?
...谢谢
答案 0 :(得分:1)
我遇到了完全相同的情况。首先我使用的是DatabaseUtil.insertHelper,600个条目花了我30秒。
我做了一些挖掘,发现我插入的每一行都被提交,这是非常昂贵的。
为了解决这个问题,我使用insertAll方法切换到ORMLite:
/**
* Inserts multiple objects into the database quickly by committing them all at once
*
* @param objects The objects to insert
*/
public void insertAll(final T[] objects) {
try {
dao.callBatchTasks(new Callable<Void>() {
@Override
public Void call() throws Exception {
for (T object : objects) {
dao.create(object);
}
return null;
}
});
} catch (Exception e) {
AdbLogger.error("Error inserting new " + className + "s in the database");
}
}
这里的想法是他们插入对象数组,然后最后只进行一次大提交。在此切换之后,插入几乎是瞬间完成的。
答案 1 :(得分:0)
您应该使用statements
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();
Reference
这里是one more link,其中给出了这两种插入方法之间的比较。 (对于100条记录,正常插入需要1657毫秒,而endTransaction()
的语句需要92毫秒)