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

1、 一个一个插入

 publicstaticboolean insert(SQLiteOpenHelper openHelper,              RemoteAppInfo appInfo) {          if (null == appInfo) {              returntrue;          }          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();              }          }          returnfalse;      }      for (RemoteAppInfo remoteAppInfo : list) {            RemoteDBUtil.insert(helper, remoteAppInfo);         }

耗时:106524ms,也就是106s

2、 开启事务批量插入,使用SqliteDateBase中的insert(String table, String nullColumnHack, ContentValues values)方法

publicstaticboolean insert(SQLiteOpenHelper openHelper,          List<RemoteAppInfo> list) {      boolean result = true;      if (null == list || list.size() <= 0) {          returntrue;      }      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();          returnfalse;      } finally {          try {              if (null != db) {                  db.endTransaction();                  db.close();              }          } catch (Exception e) {              e.printStackTrace();          }      }      returntrue;  }  

耗时:2968ms

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

  publicstaticboolean insertBySql(SQLiteOpenHelper openHelper,              List<RemoteAppInfo> list) {          if (null == openHelper || null == list || list.size() <= 0) {              returnfalse;         }          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) {                      returnfalse;                 }              }              db.setTransactionSuccessful();         } catch (Exception e) {              e.printStackTrace();             returnfalse;        } finally {              try {                  if (null != db) {                      db.endTransaction();                     db.close();                 }              } catch (Exception e) {                  e.printStackTrace();             }          }          returntrue;     }

耗时:1365ms

更多相关文章

  1. 5.17学习内容 android判断软键盘状态、系统键盘监控、生成中间lo
  2. Android状态栏适配源码解析。
  3. Android中Activity状态的保存和恢复:onSaveInstanceState和onRest
  4. android WebView登录状态session id 和cookie同步
  5. android 获取camera状态?
  6. Android获取状态栏和标题栏的高度
  7. Delphi XE5 android 获取网络状态《转》
  8. android 使用SQLiteOpenHelper类批量执行sql问题
  9. BroadcastReceiver广播监听android网络状态

随机推荐

  1. Android实现应用程序换肤解决方案(二)Demos
  2. 编程回忆之Android回忆(Android标题栏的去
  3. android Manifest.xml全局配置文件中根标
  4. Android7.0、8.0应用内安装apk的问题
  5. Android(安卓)自定义时间选择器
  6. Android中给View设置阴影的三种方式
  7. 【Android应用开发】-(7)安全性设计(完整版
  8. Android如何在三年时间里征服移动世界的
  9. 集成Flutter混合开发(入坑篇)
  10. 使用Kotlin高效地开发Android(安卓)App(