Android批量插入数据到SQLite数据库的方法

 更新时间:2017年03月30日 12:03:57   作者:chaoyu168  
这篇文章主要为大家详细介绍了Android批量插入数据到SQLite数据库的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

有时需要把一些数据内置到应用中,常用的有以下几种方式:

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(); 

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Android开发常用经典代码段集锦

    Android开发常用经典代码段集锦

    这篇文章主要介绍了Android开发常用经典代码段,涉及Android开发过程中针对手机、联系人、图片、存储卡等的相关操作技巧,非常简单实用,需要的朋友可以参考下
    2016-02-02
  • Android本地搜索业务优化方案

    Android本地搜索业务优化方案

    这篇文章主要为大家介绍了Android本地搜索业务优化方案详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • androidstudio3.0使用butterknife报错解决的解决方法

    androidstudio3.0使用butterknife报错解决的解决方法

    这篇文章主要介绍了androidstudio3.0使用butterknife报错解决的解决方法,非常具有实用价值,需要的朋友可以参考下
    2018-01-01
  • Android AOP注解Annotation详解(一)

    Android AOP注解Annotation详解(一)

    这篇文章主要介绍了Android AOP注解Annotation详细介绍的相关资料,Annotation是代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理,需要的朋友可以参考下
    2017-03-03
  • Android之AnimationDrawable简单模拟动态图

    Android之AnimationDrawable简单模拟动态图

    这篇文章主要为大家详细介绍了Android之AnimationDrawable简单模拟动态图的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • android表格效果之ListView隔行变色实现代码

    android表格效果之ListView隔行变色实现代码

    首先继承SimpleAdapter再使用重载的Adapter来达到效果,其实主要是需要重载SimpleAdapter,感兴趣的朋友可以研究下,希望本文可以帮助到你
    2013-02-02
  • Kotlin面向对象知识点讲解

    Kotlin面向对象知识点讲解

    面向对象编程通过对事物的抽象,大大的简化了程序的开发难度。我们常用的编程语言:Java、C++、Python都属于面向对象编程。Kotlin与java类似,也是一种面向对象编程语言。本文从面向对象三个基本特征:封装、继承、多态,来阐述一下Kotlin中的面向对象编程
    2022-12-12
  • Android 手写热修复dex实例详解

    Android 手写热修复dex实例详解

    这篇文章主要为大家介绍了Android 手写热修复dex实现示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Android 马赛克(Mosaics)效果

    Android 马赛克(Mosaics)效果

    这篇文章主要为大家介绍了Android 马赛克(Mosaics)效果,马赛克(Mosaics)效果应用非常广泛,想要学习的不要错过本文,可以借鉴参考一下
    2016-01-01
  • 探讨Android与iOS,我们将何去何从?

    探讨Android与iOS,我们将何去何从?

    本篇文章是对Android与iOS进行了详细的分析与探讨,需要的朋友参考下
    2013-05-05

最新评论