使用 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使用

Android 使用Room操作SQLite数据库让其变得无比高效和简洁(教程一)

Android 自带的SQLite的原生数据库基本使用

android开发之路09(浅谈SQLite数据库01)