对比在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. Modelsim添加Lattice库

    Step 1 安装好modelsim,并将modelsim的目录添加到系统PATH中. (确认方法:在任意位置同时按下Shift+鼠标右键,在出来的菜单里选择“在此处打开命令窗口”,然后输入vsim, ...

  2. 关于casperjs的介绍

    casperjs是一个自动化测试框架,功能强大,也很适合当做爬虫软件使用,casperjs基于phantomjs软件,phantomjs是一个没有界面的浏览器环境,基于python环境 一,安装cas ...

  3. FFmpeg编译:Linux下使用NDK编译FFmpeg

    环境: Ubuntu 1.下载并解压FFmpeg3.4.zip(略) 2.将编译脚本放入到FFmpeg解压后的目录. 3.执行编译脚本: ./linux_build_android.sh linux_ ...

  4. vue-cli+webpack在生成的项目中使用bootstrap方法(二)

    vue-cli+webpack在生成的项目中使用bootstrap方法(一)中,是通过手动下载bootstrap库,然后手动添加到src/assets中,显然是过程太多. 当然是可以更省力些,可以通过 ...

  5. 每日英语:The Toy Mogul Who Became A Billionaire Through His Fight To The Death With Barbie

    The trophy case in the tiny conference room outside Isaac Larian’s corner office spans an entire wal ...

  6. scala连接数据库

    scala连接数据库 使用JDBC即可: 在sbt中添加对应依赖 libraryDependencies ++= Seq( "mysql" % "mysql-connec ...

  7. spring 事务传播行为实例分析

    Spring事务传播行为: spring特有的事务传播行为,spring支持7种事务传播行为,确定客户端和被调用端的事务边界(说得通俗一点就是多个具有事务控制的service的相互调用时所形成的复杂的 ...

  8. Redhat6.5安装DB2 Express-C版本

    Linux Redhat6.5安装DB2 Express-C版本: 创建相关用户和组 创建用户组: groupdel db2iadm1 groupadd -g 999 db2iadm1 groupad ...

  9. fzu2158

    http://acm.fzu.edu.cn/problem.php?pid=2158 在密室逃脱游戏中,大家被困在一个密室中,为了逃出密室,需要找到正确的数字密码,于是大家分头行动,分别找到了密码的子 ...

  10. Vim中的寄存器

    # Vim中的寄存器 ### 文件名寄存器---- 粘贴文件名 `"%p"` ### 查看vim中的寄存器---- 查看寄存器 `reg` 或 `dis` ### 详细介绍---- ...