使用 Android 进行高效的 SQLite 插入
Posted
技术标签:
【中文标题】使用 Android 进行高效的 SQLite 插入【英文标题】:Do efficient SQLite Inserts with Android 【发布时间】:2011-07-15 17:18:34 【问题描述】:我有一个处理我大学打印机的活动。打印机可以通过 Internet 下载,然后存储在 SQLite 数据库中。问题是,必须创建大约 500 个数据库条目来存储它们,这对我的代码来说非常耗时(在 Google Nexus S 上大约需要 30 秒)。我这样做的代码是这样的:
printerDB = new PrinterListOpenHelper(this);
SQLiteDatabase db = printerDB.getWritableDatabase();
db.execSQL("INSERT INTO destination (id, destination) VALUES(1,'BSAC240');");
db.execSQL("INSERT INTO destination (id, destination) VALUES(2,'BSAD152');");
...
这之后是大约。 500 个类似的行。我也试着用一个来做到这一点
db.rawQuerry("INSERT INTO destination (id, destination) VALUES(1,'BSAC240');
INSERT INTO destination (id, destination) VALUES(2,'BSAD152');.......");
但实际上只执行了第一个 INSERT 语句。
有人知道提高效率的诀窍吗?还是 android 数据库真的那么慢?
非常感谢您的帮助! 西蒙
【问题讨论】:
【参考方案1】:如果将它们放入事务中会更好吗?
BEGIN TRANSACTION
INSERT INTO destination (id, destination) VALUES(1,'BSAC240');
INSERT INTO destination (id, destination) VALUES(2,'BSAD152');
END TRANSACTION
甚至(更新以下cmets)
db.beginTransaction()
try
db.execSQL("INSERT INTO destination (id, destination) VALUES(1,'BSAC240');");
db.execSQL("INSERT INTO destination (id, destination) VALUES(2,'BSAD152');");
db.setTransactionSuccessful();
finally
db.endTransaction();
【讨论】:
很好发现,显然也用 try/catch 包装它 谢谢!这正是我一直在寻找的,对我帮助很大!你知道为什么我们在技术上必须这样做吗? 将其包装在事务中意味着它们全部一起完成。没有它,每一个都是自己完成的。 太棒了!这为我节省了很多时间。 (~30 秒到 2/3 秒)谢谢 ;)以上是关于使用 Android 进行高效的 SQLite 插入的主要内容,如果未能解决你的问题,请参考以下文章
Android使用Room操作SQLite数据库让其变得无比高效和简洁(进一步完善用RecyclerView显示数据库中的数据)
Android 使用Room操作数据库进行数据库版本的升级和迁移
Android 高效的SQLite型数据库greenDAO使用