Android操作sqlite批量导入大量数据耗时的解决方法

在Android开发中,需要向sqlite中导入大量数据,按照一般做法是很耗时的,测试了一下,导入一条数据在100ms左右,按照这样的做法,如果导入1万条数据,大约得花17分钟,经过实际测试,确实花了17分钟左右。

解决耗时的办法是利用sqlite的事务来处理。方法如下:

首先获取database对象,然后执行如下方法:

db.beginTransaction();  // 手动设置开始事务
/*
 * 数据插入操作循环
 * 操作update、insert、delete、select可以循环嵌套
 */
db.setTransactionSuccessful();  // 设置事务处理成功,不设置会自动回滚不提交
db.endTransaction();  // 处理完成

测试了一下,如果导入1万条数据,大约耗时20秒左右。性能比之前提升了一大截。

比如导入多个ContentValues,可以这样操作:

public int insert(Uri uri, ContentValues[] values) {
    DatabaseHelper mOpenHelper = new DatabaseHelper(this);
    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; } 


4