【发布时间】:2016-04-22 02:17:50
【问题描述】:
我在我的应用程序中使用 SQLite 数据库。对于特定操作,我想删除特定表中的多个(可能相当多,最多大约一百个)条目。我已经尝试通过在for 循环中根据需要多次调用deleteStuffLink() 并在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();
}
【问题讨论】:
-
使用
beginTransaction()、setTransactionSuccessful()和endTransaction()将整个execSQL()调用循环包装在事务中。 -
在第一个中,为什么不断地打开/关闭数据库?这就像通过开车去商店、买牛奶、开车回家、送牛奶、开车回商店、买面包、开车回家等来完成你的杂货购物清单......
-
@CommonsWare:我要试试。你能解释一下为什么这会有所帮助吗? MarcB:因为这也是我用来删除单行的方法,所以它从来都不是为删除多行而设计的,我只是在运行中尝试了一个快速的实现。
标签: android android-sqlite sqliteopenhelper