Android数据库大批量数据插入优化

简介:

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

1、 一个一个插入



 1 public static boolean insert(SQLiteOpenHelper openHelper,
 2             RemoteAppInfo appInfo) {
 3         if (null == appInfo) {
 4             returntrue;
 5         }
 6         SQLiteDatabase db = null;
 7         try {
 8             db = openHelper.getWritableDatabase();
 9             ContentValues values = appInfo.getContentValues();
10             return -1 != db.insert(RemoteDBHelper.TABLE_APP_REMOTE, null,
11                     values);
12         } catch (Exception e) {
13             e.printStackTrace();
14         } finally {
15             if (null != db) {
16                 db.close();
17             }
18         }
19         returnfalse;
20     }
21
22
23     for (RemoteAppInfo remoteAppInfo : list) {
24           RemoteDBUtil.insert(helper, remoteAppInfo);
25         }

耗时:106524ms,也就是106s

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



 1 public static boolean insert(SQLiteOpenHelper openHelper,
 2         List list) {
 3     boolean result = true;
 4     if (null == list || list.size() <= 0) {
 5         returntrue;
 6     }
 7     SQLiteDatabase db = null;
 8
 9     try {
10         db = openHelper.getWritableDatabase();
11         db.beginTransaction();
12         for (RemoteAppInfo remoteAppInfo : list) {
13             ContentValues values = remoteAppInfo.getContentValues();
14             if (db.insert(RemoteDBHelper.TABLE_APP_REMOTE, null, values) < 0) {
15                 result = false;
16                 break;
17             }
18         }
19         if (result) {
20             db.setTransactionSuccessful();
21         }
22     } catch (Exception e) {
23         e.printStackTrace();
24         returnfalse;
25     } finally {
26         try {
27             if (null != db) {
28                 db.endTransaction();
29                 db.close();
30             }
31         } catch (Exception e) {
32             e.printStackTrace();
33         }
34     }
35     returntrue;
36 }  


耗时:2968ms

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


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

相关文章
|
5天前
|
JSON Android开发 数据格式
android与Web服务器交互时的cookie使用-兼谈大众点评数据获得(原创)
android与Web服务器交互时的cookie使用-兼谈大众点评数据获得(原创)
14 2
|
7天前
|
Java Linux API
统计android设备的网络数据使用量
统计android设备的网络数据使用量
14 0
|
14天前
|
DataWorks Oracle 关系型数据库
DataWorks操作报错合集之尝试从Oracle数据库同步数据到TDSQL的PG版本,并遇到了与RAW字段相关的语法错误,该怎么处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
30 0
|
1天前
|
存储 传感器 Android开发
构建高效Android应用:从优化布局到提升性能
【5月更文挑战第13天】 在竞争激烈的移动应用市场中,一个高效的Android应用不仅需要具备直观的用户界面和丰富的功能,还要确保流畅的性能和快速的响应时间。本文将深入探讨如何通过优化布局设计、减少资源消耗以及利用系统提供的API来提升Android应用的性能。我们将分析布局优化的策略,讨论内存使用的常见陷阱,并介绍异步处理和电池寿命的考量。这些技术的综合运用将帮助开发者构建出既美观又高效的Android应用。
|
1天前
|
移动开发 Android开发 开发者
构建高效Android应用:探究Kotlin协程的优化实践
【5月更文挑战第13天】 在移动开发领域,Android平台的流畅体验至关重要。随着Kotlin语言的普及,协程作为其核心特性之一,为异步编程提供了简洁且高效的解决方案。本文将深入探讨Kotlin协程在Android应用中的优化使用,从基本概念到实际案例分析,旨在帮助开发者构建更加响应迅速、性能卓越的应用。我们将通过对比传统线程与协程的差异,展示如何利用协程简化代码结构,并通过优化实践减少资源消耗,提升用户体验。
|
1天前
|
存储 机器学习/深度学习 人工智能
新一代数据库技术:融合AI的智能数据管理系统
传统数据库管理系统在数据存储和查询方面已经取得了巨大的成就,但随着数据量的不断增长和应用场景的多样化,传统数据库已经难以满足日益增长的需求。本文将介绍一种新一代数据库技术,即融合了人工智能技术的智能数据管理系统。通过结合AI的强大能力,这种系统能够实现更高效的数据管理、更智能的数据分析和更精准的数据预测,为用户带来全新的数据管理体验。
|
2天前
|
移动开发 监控 Android开发
构建高效Android应用:Kotlin协程的实践与优化
【5月更文挑战第12天】 在移动开发领域,性能与响应性是衡量一个应用程序优劣的关键指标。特别是在Android平台上,由于设备的多样性和系统资源的限制,开发者需要精心编写代码以确保应用流畅运行。近年来,Kotlin语言因其简洁性和功能性而广受欢迎,尤其是其协程特性,为异步编程提供了强大而轻量级的解决方案。本文将深入探讨如何在Android应用中使用Kotlin协程来提升性能,以及如何针对实际问题进行优化,确保应用的高效稳定执行。
|
3天前
|
分布式计算 Java 关系型数据库
|
4天前
|
数据库
编程日记02:个人站优化数据库和日志
编程日记02:个人站优化数据库和日志
9 0
|
4天前
|
Android开发 数据库管理
Android如何在Activity和Service之间传递数据
Android如何在Activity和Service之间传递数据
10 3