从SQLite数据库中删除需要很长时间,导致挂起

时间:2016-04-21 18:06:20

标签: android android-sqlite sqliteopenhelper

我在我的应用中使用SQLite数据库。对于特定操作,我想删除特定表中的多个(可能是一些,最多约一百个)条目。我尝试在deleteStuffLink()循环中根据需要多次调用for,并在deleteStuffLink()方法中添加循环。这两种方式都导致只有15件商品的3秒钟挂起。

导致这种缓慢行为的原因是什么,我该如何解决?

普通删除方法
for (String s : nameArray) { deleteStuffLink(s); }

public void deleteStuffLink(String name) {
    SQLiteDatabase db;
    db = getWritableDatabase();
    db.execSQL("DELETE FROM " + TABLE_LinkTable 
        + " WHERE " + LT_COLUMN_NAME + "=\"" + name + "\";");
    db.close();
}

合并循环

public void deleteAllStuffLink(ArrayList<String> nameArray) {
    SQLiteDatabase db;
    db = getWritableDatabase();
    for (String s : nameArray) {
        db.execSQL("DELETE FROM " + TABLE_LinkTable 
            + " WHERE " + LT_COLUMN_NAME + "=\"" + s + "\";");
    }
    db.close();
}

1 个答案:

答案 0 :(得分:3)

作为CommonsWare评论,

public void deleteAllStuffLink(ArrayList<String> nameArray) {
    SQLiteDatabase db;
    db = getWritableDatabase();
   db.beginTransaction();
    for (String s : nameArray) {
        db.execSQL("DELETE FROM " + TABLE_LinkTable 
            + " WHERE " + LT_COLUMN_NAME + "=\"" + s + "\";");
    }
   db.setTransactionSuccessful();
   db.endTransaction();
    db.close();
}