对比在android中批量插入数据的3中方式对比(各插入1W条数据所花费的时间):

1、 一个一个插入

  1. /**
  2. * 向表中插入数据
  3. *
  4. * @param openHelper
  5. * @param appInfo
  6. * @return
  7. */
  8. public static boolean insert(SQLiteOpenHelper openHelper,
  9. RemoteAppInfo appInfo) {
  10. if (null == appInfo) {
  11. return true;
  12. }
  13. SQLiteDatabase db = null;
  14. try {
  15. db = openHelper.getWritableDatabase();
  16. ContentValues values = appInfo.getContentValues();
  17. != db.insert(RemoteDBHelper.TABLE_APP_REMOTE, null,
  18. values);
  19. } catch (Exception e) {
  20. e.printStackTrace();
  21. } finally {
  22. if (null != db) {
  23. db.close();
  24. }
  25. }
  26. return false;
  27. }
  28. for (RemoteAppInfo remoteAppInfo : list) {
  29. RemoteDBUtil.insert(helper, remoteAppInfo);
  30. }

 耗时:106524ms,也就是106s

2、 开启事务批量插入,使用

SqliteDateBase中的

insert(String table, String nullColumnHack, ContentValues values)

方法

  1. /**
  2. * 向表中插入一串数据
  3. *
  4. * @param openHelper
  5. * @param appInfo
  6. * @return 如果成功则返回true,否则返回flase
  7. */
  8. public static boolean insert(SQLiteOpenHelper openHelper,
  9. List<RemoteAppInfo> list) {
  10. boolean result = true;
  11. ) {
  12. return true;
  13. }
  14. SQLiteDatabase db = null;
  15. try {
  16. db = openHelper.getWritableDatabase();
  17. db.beginTransaction();
  18. for (RemoteAppInfo remoteAppInfo : list) {
  19. ContentValues values = remoteAppInfo.getContentValues();
  20. ) {
  21. result = false;
  22. break;
  23. }
  24. }
  25. if (result) {
  26. db.setTransactionSuccessful();
  27. }
  28. } catch (Exception e) {
  29. e.printStackTrace();
  30. return false;
  31. } finally {
  32. try {
  33. if (null != db) {
  34. db.endTransaction();
  35. db.close();
  36. }
  37. } catch (Exception e) {
  38. e.printStackTrace();
  39. }
  40. }
  41. return true;
  42. }

耗时:2968ms

3、 开启事务批量插入,使用

SQLiteStatement

  1. /**
  2. * 第二种方式批量插入(插入1W条数据耗时:1365ms)
  3. * @param openHelper
  4. * @param list
  5. * @return
  6. */
  7. public static boolean insertBySql(SQLiteOpenHelper openHelper,
  8. List<RemoteAppInfo> list) {
  9. ) {
  10. return false;
  11. }
  12. SQLiteDatabase db = null;
  13. try {
  14. db = openHelper.getWritableDatabase();
  15. String sql = "insert into " + RemoteDBHelper.TABLE_APP_REMOTE + "("
  16. + RemoteDBHelper.COL_PKG_NAME + ","// 包名
  17. + RemoteDBHelper.COL_USER_ACCOUNT + ","// 账号
  18. + RemoteDBHelper.COL_APP_SOURCE + ","// 来源
  19. + RemoteDBHelper.COL_SOURCE_UNIQUE + ","// PC mac 地址
  20. + RemoteDBHelper.COL_MOBILE_UNIQUE + ","// 手机唯一标识
  21. + RemoteDBHelper.COL_IMEI + ","// 手机IMEI
  22. + RemoteDBHelper.COL_INSTALL_STATUS + ","// 安装状态
  23. + RemoteDBHelper.COL_TRANSFER_RESULT + ","// 传输状态
  24. + RemoteDBHelper.COL_REMOTE_RECORD_ID // 唯一标识
  25. + ") " + "values(?,?,?,?,?,?,?,?,?)";
  26. SQLiteStatement stat = db.compileStatement(sql);
  27. db.beginTransaction();
  28. for (RemoteAppInfo remoteAppInfo : list) {
  29. , remoteAppInfo.getPkgName());
  30. , remoteAppInfo.getAccount());
  31. , remoteAppInfo.getFrom());
  32. , remoteAppInfo.getFromDeviceMd5());
  33. , remoteAppInfo.getMoblieMd5());
  34. , remoteAppInfo.getImei());
  35. , remoteAppInfo.getInstallStatus());
  36. , remoteAppInfo.getTransferResult());
  37. , remoteAppInfo.getRecordId());
  38. long result = stat.executeInsert();
  39. ) {
  40. return false;
  41. }
  42. }
  43. db.setTransactionSuccessful();
  44. } catch (Exception e) {
  45. e.printStackTrace();
  46. return false;
  47. } finally {
  48. try {
  49. if (null != db) {
  50. db.endTransaction();
  51. db.close();
  52. }
  53. } catch (Exception e) {
  54. e.printStackTrace();
  55. }
  56. }
  57. return true;
  58. }

耗时:1365ms

android批量插入数据效率对比的更多相关文章

  1. Android 批量插入数据到SQLite数据库

    Android中在sqlite插入数据的时候默认一条语句就是一个事务,因此如果存在上万条数据插入的话,那就需要执行上万次插入操作,操作速度可想而知.因此在Android中插入数据时,使用批量插入的方式 ...

  2. Android批量插入数据到SQLite数据库

    Android中在sqlite插入数据的时候默认一条语句就是一个事务,因此如果存在上万条数据插入的话,那就需要执行上万次插入操作,操作速度可想而知.因此在Android中插入数据时,使用批量插入的方式 ...

  3. JDBC批量插入数据效率分析

    对于需要批量插入数据库操作JDBC有多重方式,本利从三个角度对Statement和PreparedStatement两种执行方式进行分析,总结较优的方案. 当前实现由如下条件: 执行数据库:Mysql ...

  4. Oracle 逐条和批量插入数据方式对比

    创建测试表 create table base_users ( userid         varchar2(16), username  varchar2(32), passwd      var ...

  5. Oracle 插入数据效率对比

    oracle插入数据有多种方式: 将从多个表中查出来的数据插入到临时表中 数据行数 5189597 1.传统方式:直接将数据插入到表中 insert into LLB_BASIC_USER_D_TEM ...

  6. EF批量插入数据耗时对比

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. MySQL:JDBC批量插入数据的效率

    平时使用mysql插入.查询数据都没有注意过效率,今天在for循环中使用JDBC插入1000条数据居然等待了一会儿 就来探索一下JDBC的批量插入语句对效率的提高 首先进行建表 create tabl ...

  8. 批量插入数据(基于Mybatis的实现-Oracle)

    前言:做一个数据同步项目,要求:同步数据不丢失的情况下,提高插入性能. 项目DB框架:Mybatis.DataBase:Oracle. -------------------------------- ...

  9. SpringBoot(18)---通过Lua脚本批量插入数据到Redis布隆过滤器

    通过Lua脚本批量插入数据到布隆过滤器 有关布隆过滤器的原理之前写过一篇博客: 算法(3)---布隆过滤器原理 在实际开发过程中经常会做的一步操作,就是判断当前的key是否存在. 那这篇博客主要分为三 ...

随机推荐

  1. 云服务设置多台tomcat开机自启动

    紧接此篇文章:http://www.cnblogs.com/leechenxiang/p/7091731.html 1. 修改profile,添加红框内6行代码 vim /etc/profile 代码 ...

  2. ios 关于屏幕旋转和屏幕晃动

    内置加速计是智能手机最酷的特性之一,ios可以通过这个小设备知道用户握持手机的方式,以及用户是否移动了手机,ios使用加速计处理自动旋转,并且许多游戏都是用它作为控制机制,它还可以用于检测摇动和其他突 ...

  3. 深入理解Linux内核-内存管理

    内核如果给自己分配动态内存 动态内存:RAM的某些部分被永久打分配给内核,用来存放内核代码以及静态内核数据结构:剩余的部分被称为动态内存 连续物理内存区管理: 页框管理:1.页大小的选择,通常情况下主 ...

  4. IOC的实现原理—反射与工厂模式的结合

    反射机制概念   我们考虑一个场景,如果我们在程序运行时,一个对象想要检视自己所拥有的成员属性,该如何操作?再考虑另一个场景,如果我们想要在运行期获得某个类的Class信息如它的属性.构造方法.一般方 ...

  5. Zookeeper之Zookeeper的Client的分析

    1)几个重要概念 ZooKeeper:客户端入口 Watcher:客户端注册的callback ZooKeeper.SendThread: IO线程 ZooKeeper.EventThread: 事件 ...

  6. node知识积累

    // 在node的应用程序中,执行异步操作的函数将回掉函数最为最后一个参数,回掉函数接收错误对象作为第一个参数 var fs = require('fs') fs.readFile('input.tx ...

  7. 扩展music-list.vue让列表前三名显示🏆奖杯

    1.在music-list.vue中写DOM <li @click="seletItem(song,index)" class="song-item" v ...

  8. Testng生成的测试报告乱码解决办法

    Testng生成的测试报告乱码解决办法 2017-06-16 1 问题描述 乱码是程序编码不统一,比如Java源代码是utf-8,编译是gbk,这时会乱码. 代码如下: org.testng.Repo ...

  9. golang初始化结构体数组

    最近组里新项目要求用go来写,没办法只能边看文档边写代码,今天遇到郁闷的问题,查了好久最终发现居然是一个标点符号的导致的,遂纪录之 刚刚给一个接口写单元测试时想初始化一个结构体数组,然后遍历该数组并建 ...

  10. python 正则表达式 -- IP地址验证

    p = re.compile("^((?:(2[0-4]\d)|(25[0-5])|([01]?\d\d?))\.){3}(?:(2[0-4]\d)|(255[0-5])|([01]?\d\ ...