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数据批量插入SQLite数据库
# Android数据批量插入SQLite
# Android数据批量插入数据库
# Android sqlite设置主键自增长的方法教程
# SQLite数据库中如何获取新插入数据的自增长ID
# 种方法
# 那就
# 要把
# 请使用
# 几种
# 时就
# 最短
# 可想而知
# 最优
# 可执行
# 大家多多
# 时需
# 类中
# 应该是
# 事务处理
# 文档
# beginTransaction
# table_name
# setTransactionSuccessful
# getWritableDatabase
相关文章:
如何生成腾讯云建站专用兑换码?
建站与域名管理如何高效结合?
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
,sp开头的版面叫什么?
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
建站之星上传入口如何快速找到?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
建站之星Pro快速搭建教程:模板选择与功能配置指南
网站制作网站,深圳做网站哪家比较好?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
制作公司内部网站有哪些,内网如何建网站?
建站之星安装模板失败:服务器环境不兼容?
寿县云建站:智能SEO优化与多行业模板快速上线指南
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
盐城做公司网站,江苏电子版退休证办理流程?
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
青岛网站建设如何选择本地服务器?
如何配置IIS站点权限与局域网访问?
如何在阿里云通过域名搭建网站?
建站主机与服务器功能差异如何区分?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
如何高效利用亚马逊云主机搭建企业网站?
公司网站制作价格怎么算,公司办个官网需要多少钱?
专业商城网站制作公司有哪些,pi商城官网是哪个?
如何快速生成专业多端适配建站电话?
建站之星客服服务时间及联系方式如何?
深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?
建站之星代理费用多少?最新价格详情介绍
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
如何基于云服务器快速搭建网站及云盘系统?
如何访问已购建站主机并解决登录问题?
如何通过cPanel快速搭建网站?
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
b2c电商网站制作流程,b2c水平综合的电商平台?
如何用已有域名快速搭建网站?
,石家庄四十八中学官网?
实现虚拟支付需哪些建站技术支撑?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
建站之星导航如何优化提升用户体验?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
如何通过虚拟机搭建网站?详细步骤解析
*请认真填写需求信息,我们会在24小时内与您取得联系。