对比在android中批量插入数据的3中方式对比(各插入1W条数据所花费的时间):
1、 一个一个插入
/** * 向表中插入数据 * * @param openHelper * @param appInfo * @return */ public static boolean insert(SQLiteOpenHelper openHelper, RemoteAppInfo appInfo) { if (null == appInfo) { return true; } SQLiteDatabase db = null; try { db = openHelper.getWritableDatabase(); ContentValues values = appInfo.getContentValues(); return -1 != db.insert(RemoteDBHelper.TABLE_APP_REMOTE, null, values); } catch (Exception e) { e.printStackTrace(); } finally { if (null != db) { db.close(); } } return false; } for (RemoteAppInfo remoteAppInfo : list) { RemoteDBUtil.insert(helper, remoteAppInfo); }
耗时:106524ms,也就是106s
2、 开启事务批量插入,使用
SqliteDateBase中的
insert(String table, String nullColumnHack, ContentValues values)
方法
/** * 向表中插入一串数据 * * @param openHelper * @param appInfo * @return 如果成功则返回true,否则返回flase */ public static boolean insert(SQLiteOpenHelper openHelper, List<RemoteAppInfo> list) { boolean result = true; if (null == list || list.size() <= 0) { return true; } SQLiteDatabase db = null; try { db = openHelper.getWritableDatabase(); db.beginTransaction(); for (RemoteAppInfo remoteAppInfo : list) { ContentValues values = remoteAppInfo.getContentValues(); if (db.insert(RemoteDBHelper.TABLE_APP_REMOTE, null, values) < 0) { result = false; break; } } if (result) { db.setTransactionSuccessful(); } } catch (Exception e) { e.printStackTrace(); return false; } finally { try { if (null != db) { db.endTransaction(); db.close(); } } catch (Exception e) { e.printStackTrace(); } } return true; }
耗时:2968ms
3、 开启事务批量插入,使用
SQLiteStatement
/** * 第二种方式批量插入(插入1W条数据耗时:1365ms) * @param openHelper * @param list * @return */ public static boolean insertBySql(SQLiteOpenHelper openHelper, List<RemoteAppInfo> list) { if (null == openHelper || null == list || list.size() <= 0) { return false; } SQLiteDatabase db = null; try { db = openHelper.getWritableDatabase(); String sql = "insert into " + RemoteDBHelper.TABLE_APP_REMOTE + "(" + RemoteDBHelper.COL_PKG_NAME + ","// 包名 + RemoteDBHelper.COL_USER_ACCOUNT + ","// 账号 + RemoteDBHelper.COL_APP_SOURCE + ","// 来源 + RemoteDBHelper.COL_SOURCE_UNIQUE + ","// PC mac 地址 + RemoteDBHelper.COL_MOBILE_UNIQUE + ","// 手机唯一标识 + RemoteDBHelper.COL_IMEI + ","// 手机IMEI + RemoteDBHelper.COL_INSTALL_STATUS + ","// 安装状态 + RemoteDBHelper.COL_TRANSFER_RESULT + ","// 传输状态 + RemoteDBHelper.COL_REMOTE_RECORD_ID // 唯一标识 + ") " + "values(?,?,?,?,?,?,?,?,?)"; SQLiteStatement stat = db.compileStatement(sql); db.beginTransaction(); for (RemoteAppInfo remoteAppInfo : list) { stat.bindString(1, remoteAppInfo.getPkgName()); stat.bindString(2, remoteAppInfo.getAccount()); stat.bindLong(3, remoteAppInfo.getFrom()); stat.bindString(4, remoteAppInfo.getFromDeviceMd5()); stat.bindString(5, remoteAppInfo.getMoblieMd5()); stat.bindString(6, remoteAppInfo.getImei()); stat.bindLong(7, remoteAppInfo.getInstallStatus()); stat.bindLong(8, remoteAppInfo.getTransferResult()); stat.bindString(9, remoteAppInfo.getRecordId()); long result = stat.executeInsert(); if (result < 0) { return false; } } db.setTransactionSuccessful(); } catch (Exception e) { e.printStackTrace(); return false; } finally { try { if (null != db) { db.endTransaction(); db.close(); } } catch (Exception e) { e.printStackTrace(); } } return true; }
耗时:1365ms
相关推荐
主要为大家详细介绍了Android批量插入数据到SQLite数据库的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Android中在sqlite插入数据的时候默认一条语句是一个事务,因此如果...批量插入数据也有很多方法,那么那种方法更快呢,下面通过一个demo比较一下各个方法的插入速度。 1、使用db.execSQL(sql) 这里是把要插入
可以批量从插入短信 联系人 通话记录, 解决android4.4之后无法插入短信问题, 安装包apk
可以批量从插入短信 联系人 通话记录,解决android4.4之后无法插入短信问题
android中SQLite数据库中用insert同时插入多条记录的方法和效率比较
NULL 博文链接:https://21jhf.iteye.com/blog/1915273
Android批量下载图片并进行缓存,本例包含内存和文件二重缓存,极大的提高流畅度。
在Android Studio实现MQTT对主题的订阅和数据的收发,以及将数据封装成对象传回MainActivity,方便进行数据处理,其操作信息在TextView中展示相关的数据。对相关的数据一目了然,同时,在页面中为物联网的开发提供了...
android——SpringMVC实现批量文件上传 HTTP协议和HttpClient2种方式实现批量上传
Android批量打包示例,完整的展示了在项目上线时需要一次性生成多个渠道包apk的需求
随机生成带号码的联系人,并添加入联系人数据库(小工具)
Android APK 批量安装程序,指定目录批量安装
Android 中基于RecyclerView实现Item内容的批量删除,全选操作。
解决android apk的批量打包,支持渠道号替换(字符串替换)、服务器地址替换、资源替换、指定文件修改、修改包名
为了提高ListView的效率和应用程序的性能,在Android应用程序中不应该一次性加载ListView所要显示的全部信息,而是采取分批加载策略,随着用户的滑动,动态的从后台加载所需的数据,并渲染到ListView组件中,这样...
android批量自动打包工具,用过的最好的一个。windows平台上的,linux系统勿下。 配置资源很方便,基本资源都能替换,很好用
world 文档,描述了Android g1环境,C、Java、JNI调用(C调Java、Java调C)基本运算、方法调用、字符串连接的效率测试结果。
这是一个android批量创建文件夹,及其可以批量删除的
Android EditText插入QQ表情源码,测试已经通过,可下载查看。