android批量插入数据效率对比
对比在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();
- != 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;
- ) {
- return true;
- }
- SQLiteDatabase db = null;
- try {
- db = openHelper.getWritableDatabase();
- db.beginTransaction();
- for (RemoteAppInfo remoteAppInfo : list) {
- ContentValues values = remoteAppInfo.getContentValues();
- ) {
- 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) {
- ) {
- 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) {
- , remoteAppInfo.getPkgName());
- , remoteAppInfo.getAccount());
- , remoteAppInfo.getFrom());
- , remoteAppInfo.getFromDeviceMd5());
- , remoteAppInfo.getMoblieMd5());
- , remoteAppInfo.getImei());
- , remoteAppInfo.getInstallStatus());
- , remoteAppInfo.getTransferResult());
- , remoteAppInfo.getRecordId());
- long result = stat.executeInsert();
- ) {
- 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批量插入数据效率对比的更多相关文章
- Android 批量插入数据到SQLite数据库
Android中在sqlite插入数据的时候默认一条语句就是一个事务,因此如果存在上万条数据插入的话,那就需要执行上万次插入操作,操作速度可想而知.因此在Android中插入数据时,使用批量插入的方式 ...
- Android批量插入数据到SQLite数据库
Android中在sqlite插入数据的时候默认一条语句就是一个事务,因此如果存在上万条数据插入的话,那就需要执行上万次插入操作,操作速度可想而知.因此在Android中插入数据时,使用批量插入的方式 ...
- JDBC批量插入数据效率分析
对于需要批量插入数据库操作JDBC有多重方式,本利从三个角度对Statement和PreparedStatement两种执行方式进行分析,总结较优的方案. 当前实现由如下条件: 执行数据库:Mysql ...
- Oracle 逐条和批量插入数据方式对比
创建测试表 create table base_users ( userid varchar2(16), username varchar2(32), passwd var ...
- Oracle 插入数据效率对比
oracle插入数据有多种方式: 将从多个表中查出来的数据插入到临时表中 数据行数 5189597 1.传统方式:直接将数据插入到表中 insert into LLB_BASIC_USER_D_TEM ...
- EF批量插入数据耗时对比
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- MySQL:JDBC批量插入数据的效率
平时使用mysql插入.查询数据都没有注意过效率,今天在for循环中使用JDBC插入1000条数据居然等待了一会儿 就来探索一下JDBC的批量插入语句对效率的提高 首先进行建表 create tabl ...
- 批量插入数据(基于Mybatis的实现-Oracle)
前言:做一个数据同步项目,要求:同步数据不丢失的情况下,提高插入性能. 项目DB框架:Mybatis.DataBase:Oracle. -------------------------------- ...
- SpringBoot(18)---通过Lua脚本批量插入数据到Redis布隆过滤器
通过Lua脚本批量插入数据到布隆过滤器 有关布隆过滤器的原理之前写过一篇博客: 算法(3)---布隆过滤器原理 在实际开发过程中经常会做的一步操作,就是判断当前的key是否存在. 那这篇博客主要分为三 ...
随机推荐
- 简单理解MapView 以及 设置 MKAnnotationView
MKMapView 相当于一个容器 .可以展示 MKAnnotationView.. 要使用它需要设置 数据源代理 _mapView.delegate = self; 它的数据源对象就是 符合 ...
- Java:多线程,Semaphore同步器
1. 背景 类java.util.concurrent.Semaphore提供了一个计数信号量.通过Semaphore类,可以控制某个资源可被同时访问的个数,通过 acquire() 获取一个许可,如 ...
- Android学习之Design Support Library中TextInputLayout的使用
今天学习了一个Android Design Support Library 中的TextInputLayout控件,感觉还不错,较之以往的Editetxt,多了几分灵活性,使用也非常easy,故此给大 ...
- RVM切换ruby版本号
RVM是Ruby Version Manager的缩写,是一个命令行工具,它能够让你轻松地安装,管理和使用多个版本号的Ruby.不同的rails项目使用等ruby和rails版本号不一样的时候.能够使 ...
- 添加多个CCArmature
CCArmatureDataManager::sharedArmatureDataManager()-> addArmatureFileInfo("armature\\Cowboy0. ...
- python(45)内置函数:os.system() 和 os.popen()
os.system() 和 os.popen() 概述 os.popen() 方法用于从一个命令打开一个管道. 在Unix,Windows中有效 语法 popen()方法语法格式如下: os.pope ...
- 模拟 SQLSERVER 死锁
环境: sqlserver 2008 事务(进程 ID (n))与另一个进程被死锁在锁资源上,并且已被选作死锁牺牲品.请重新运行 死锁原理: 如两个任务 任务1,已经锁定R1,再进行请求R2& ...
- Beginning SDL 2.0(3) SDL介绍及BMP渲染
SDL是一个跨平台的多媒体库.为了实现跨平台,SDL提供了一个简单的界面库抽象,比如提供了SDL_Window用于表示窗口句柄,SDL_Surface.SDL_Texture.SDL_Renderer ...
- python 创建txt并且写入做追加
import os def create_str_to_txt(self,date,str_data): """ 创建txt,并且写入 """ ...
- Win8常用快捷键
Windows 8中常用的快捷键 Windows 键 可在开始屏幕主菜单及最后一个应用程序间循环切换 Windows 键 + C 打开“超级按钮” Windows 键 + I 打开当前程序的“设置”菜 ...