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

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

  有时需要把一些数据内置到应用中,常用的有以下2种方式:其一直接拷贝制作好的SQLite数据库文件,其二是使用系统提供的数据库,然后把数据批量插入。我更倾向于使用第二种方式:使用系统创建的数据库,然后批量插入数据。批量插入数据也有很多方法,那么那种方法更快呢,下面通过一个demo比较一下各个方法的插入速度。

  1、使用db.execSQL(sql)

  这里是把要插入的数据拼接成可执行的sql语句,然后调用db.execSQL(sql)方法执行插入。


public void inertOrUpdateDateBatch(List<String> sqls) {

SQLiteDatabase db = getWritableDatabase();

db.beginTransaction();

try {

for (String sql : sqls) {

db.execSQL(sql);

}

// 设置事务标志为成功,当结束事务时就会提交事务

db.setTransactionSuccessful();

} catch (Exception e) {

e.printStackTrace();

} finally {

// 结束事务

db.endTransaction();

db.close();

}

}

  2、使用db.insert("table_name", null, contentValues)

  这里是把要插入的数据封装到ContentValues类中,然后调用db.insert()方法执行插入。


db.beginTransaction(); // 手动设置开始事务

for (ContentValues v : list) {

db.insert("bus_line_station", null, v);

}

db.setTransactionSuccessful(); // 设置事务处理成功,不设置会自动回滚不提交

db.endTransaction(); // 处理完成

db.close()

3、使用InsertHelper类

  这个类在API 17中已经被废弃了


InsertHelper ih = new InsertHelper(db, "bus_line_station");

db.beginTransaction();

final int directColumnIndex = ih.getColumnIndex("direct");

final int lineNameColumnIndex = ih.getColumnIndex("line_name");

final int snoColumnIndex = ih.getColumnIndex("sno");

final int stationNameColumnIndex = ih.getColumnIndex("station_name");

try {

for (Station s : busLines) {

ih.prepareForInsert();

ih.bind(directColumnIndex, s.direct);

ih.bind(lineNameColumnIndex, s.lineName);

ih.bind(snoColumnIndex, s.sno);

ih.bind(stationNameColumnIndex, s.stationName);

ih.execute();

}

db.setTransactionSuccessful();

} finally {

ih.close();

db.endTransaction();

db.close();

}

  4、使用SQLiteStatement

  查看InsertHelper时,官方文档提示改类已经废弃,请使用SQLiteStatement


String sql = "insert into bus_line_station(direct,line_name,sno,station_name) values(?,?,?,?)";

SQLiteStatement stat = db.compileStatement(sql);

db.beginTransaction();

for (Station line : busLines) {

stat.bindLong(1, line.direct);

stat.bindString(2, line.lineName);

stat.bindLong(3, line.sno);

stat.bindString(4, line.stationName);

stat.executeInsert();

}

db.setTransactionSuccessful();

db.endTransaction();

db.close();

  下图是以上4中方法在批量插入1万条数据消耗的时间

  可以发现第三种方法需要的时间最短,鉴于该类已经在API17中废弃,所以第四种方法应该是最优的方法。

时间: 2024-10-22 13:51:15

Android批量插入数据到SQLite数据库的相关文章

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

Android中在sqlite插入数据的时候默认一条语句就是一个事务,因此如果存在上万条数据插入的话,那就需要执行上万次插入操作,操作速度可想而知.因此在Android中插入数据时,使用批量插入的方式可以大大提高插入速度. 有时需要把一些数据内置到应用中,常用的有以下2种方式:其一直接拷贝制作好的SQLite数据库文件,其二是使用系统提供的数据库,然后把数据批量插入.我更倾向于使用第二种方式:使用系统创建的数据库,然后批量插入数据.批量插入数据也有很多方法,那么那种方法更快呢,下面通过一个dem

.Net批量插入数据到SQLServer数据库,SqlBulkCopy类批量插入大数据到数据库

批量的的数据导入数据库中,尽量少的访问数据库,高性能的对数据库进行存储. 采用SqlBulkCopy来处理存储数据.SqlBulkCopy存储大批量的数据非常的高效,将内存中的数据表直接的一次性的存储到数据库中,而不需要一次一次的向数据库Insert数据. 经过几次实验,百万级别的数据表,也只需几秒时间内就可以完全的存入数据库中,其速度,比传统的Insert into方法不止快很多倍. 下面看代码: /// <summary> /// 批量插入数据 /// </summary> /

用SqlBulkCopy批量插入数据到SqlServer数据库表中

首先创建一个数据库连接类:SQLHelper using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; using System.Data; namespace insetData { public class SQLHelper { public static readonly string Strconn = "Data

Android批量插入数据效率对比

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.getWri

android SQLite 批量插入数据慢的解决方案 (正对于不同的android api 版本)

SQLite,是一款轻型的数据库,被广泛的运用到很多嵌入式的产品中,因为占用的资源非常少,二其中的操作方式几乎和我们接触的数据库不多,甚至只有几百K的他自然会被需求者青睐,下面讲一下在这样的轻型数据库中怎么对他进行一些读写操作. 之前做选择联系人的时候出现如果一个手机里联系人超过2000的话,往数据库里面插入会非常耗时,不同的手机存储的条数不同,这个存储的数量和手机的内存有很大的关系,往往取决于手机内存,下面对于数据量大的情况来写一下sqlite的批量查询. SqLite 掺入数据有几种 第一种

用python操作mysql数据库(之批量插入数据)

#!/usr/bin/env python # -*- coding: utf-8 -*- import MySQLdb #建立连接 conn = MySQLdb.connect(host='127.0.0.1',user='root',passwd='1qaz#EDC',db='test_db') cur = conn.cursor() #对数据进行操作 li = [('tanzhenx','shaoguan'),('huangmengdie','shaoguan')] #定义一个列表,列表中

使用存储过程向数据库批量插入数据

<一> 前言 最近有个需求,需要向数据库并发批量插入数据. 最开始使用存储过程,类似这样的:  delimiter //   CREATE PROCEDURE load_part_tab()  begin      declare v int default 0;      while v < 8000000      do          insert into part_tab          values (v,'testing partitions',adddate('199

批量插入数据, 将DataTable里的数据批量写入数据库的方法

大量数据导入操作, 也就是直接将DataTable里的内容写入到数据库 通用方法: 拼接Insert语句, 好土鳖 1. MS Sql Server:   使用SqlBulkCopy 2. MySql: adapter.update()批量更新 MySqlBulkLoader, 这个是从文件里边到的, 有个实现是先将DATATable编程CSV文件, 在用MySqlBulkLoader导入MySql 参考文章: http://theonetechnologies.com/outsourcing/

JMeter接口测试-Jmeter向数据库批量插入数据(随机变量的使用)

前言 除了编写Python脚本批量向数据库插入数据以外,今天我们来学习一下如何利用JMeter向mysql数据库批量插入数据吧! 一:添加线程组,添加并配置JDBC Connection Configuration 二:导入mysql驱动包,下载好mysql的驱动包(mysql-connector-java-5.1.22-bin.jar),放到jmeter的lib目录下,选中测试计划,添加mysql驱动包 三:我们需要插入的数据量可以在线程组的线程数.循环次数进行配置,如下,这里只插入10条数据