Android操作sqlite导入大量数据耗时的解决方法
2013-07-13 14:03
405 查看
在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;
}
解决耗时的办法是利用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;
}
相关文章推荐
- Android操作sqlite导入大量数据耗时的解决方法
- Android事务操作(操作sqlite导入大量数据耗时的解决方法)
- Android操作sqlite导入大量数据耗时的解决方法
- SQLite 插入大量数据慢的解决方法
- C++操作MySQL大量数据插入效率低下的解决方法
- 用数据库访问的方法解决从excel大量导入数据
- hadoop超时解决办法context.progress()的作用 假设在map()方法中,你有一个从数据库读取大量数据的操作,是用一个循环来完成的,并且,在读完全部的数据之前,你不会有任何的数据输出
- C++操作MySQL大量数据插入效率低下的解决方法
- 导入大量数据时出现MySQL Server has gone away 的解决方法
- 启用事务操作,解决批量插入或更新sqlite,mssql等数据库耗时问题
- 解决Excel数据导入sqlite中的中文乱码问题
- 运用C#读取导入的Excel部分数据为空的解决方法
- android手机出现sqlite3 not found的解决方法
- 导入android源码有错,R.java文件不能自动生成解决方法
- android中共享全局数据的方法(static导致的内存泄漏问题,但其实并未解决)
- 【Android问题】Android导入一个工程时提示 Invalid project description的解决方法
- 导入android项目,无法自动生成R文件的解决方法(Unable to resolve target 'android-7')
- (大总结)从寻找fragment静态导入activity总是失败的解决方法中了解android应用的系统启动过程
- Android中导入工程出现Project has no default.properties file! Edit the project properties to set one.的解决方法
- Android ListView 中子控件无法获取焦点的解决方法(主要针对键盘操作)