【问题标题】:Do efficient SQLite Inserts with Android使用 Android 进行高效的 SQLite 插入
【发布时间】: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 数据库真的那么慢?

非常感谢您的帮助! 西蒙

【问题讨论】:

    标签: android sqlite performance


    【解决方案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 秒)谢谢 ;)
    猜你喜欢
    • 1970-01-01
    • 2019-09-18
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多