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

发布时间 - 2026-01-11 00:26:56    点击率:

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 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何生成URL和重定向?(路由助手函数)  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  如何快速生成高效建站系统源代码?  打造顶配客厅影院,这份100寸电视推荐名单请查收  Windows Hello人脸识别突然无法使用  网站制作大概多少钱一个,做一个平台网站大概多少钱?  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  长沙做网站要多少钱,长沙国安网络怎么样?  Linux系统命令中tree命令详解  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  如何制作一个表白网站视频,关于勇敢表白的小标题?  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  JavaScript常见的五种数组去重的方式  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  深圳网站制作培训,深圳哪些招聘网站比较好?  详解MySQL数据库的安装与密码配置  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  如何挑选高效建站主机与优质域名?  bing浏览器学术搜索入口_bing学术文献检索地址  如何在Windows虚拟主机上快速搭建网站?  php 三元运算符实例详细介绍  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  大连 网站制作,大连天途有线官网?  Python制作简易注册登录系统  Python文本处理实践_日志清洗解析【指导】  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  北京网站制作公司哪家好一点,北京租房网站有哪些?  免费网站制作appp,免费制作app哪个平台好?  如何在阿里云虚拟服务器快速搭建网站?  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  浅述节点的创建及常见功能的实现  如何在Tomcat中配置并部署网站项目?  如何用景安虚拟主机手机版绑定域名建站?  Laravel怎么在Blade中安全地输出原始HTML内容  如何快速搭建自助建站会员专属系统?  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  JavaScript中的标签模板是什么_它如何扩展字符串功能  微信小程序 input输入框控件详解及实例(多种示例)  MySQL查询结果复制到新表的方法(更新、插入)  如何在腾讯云服务器上快速搭建个人网站?  Laravel安装步骤详细教程_Laravel环境搭建指南  Laravel如何使用Eloquent进行子查询  JS弹性运动实现方法分析  如何选择可靠的免备案建站服务器?