原文路径:http://blog.csdn.net/w250shini11/article/details/8649289
最近有个客户反映,需要导入十几万的数据到sqlite,结果耗时很长,并且很容易崩溃。网上搜了下解决办法,看到了以下这个觉着靠谱的想法,但手上还没有相应的大量数据进行测试,先将方法保留下来。
在Android开发中,需要向sqlite中导入大量数据,按照一般做法是很耗时的,测试了一下,导入一条数据在100ms左右,按照这样的做法,如果导入1万条数据,大约得花17分钟,经过实际测试,确实花了17分钟左右。
解决耗时的办法是利用sqlite的事务来处理。方法如下:
首先获取database对象,然后执行如下方法:
db.beginTransaction(); //手动设置开始事务
//数据插入操作循环
//update insert delete select可以循环嵌套操作
db.setTransactionSuccessful(); //设置事务处理成功,不设置会自动回滚不提交
db.endTransaction(); //处理完成
测试了一下,如果导入1万条数据,大约耗时20秒左右。性能比之前提升了一大截。比如
public int insert(Uri uri, ContentValues[] values) {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
db.beginTransaction();
try {
int numValues = values.length;
for (int i = 0; i < numValues; i++) {
db.insertOrThrow(tablename, null, values);
}
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
return values.length;
}