我在我的应用程序中使用SQLite数据库。对于特定的操作,我想删除特定表中的多个(可能相当多,大约一百个)条目。我试图通过在for
循环中根据需要调用deleteStuffLink()
多次,并在deleteStuffLink()
方法内添加循环。这两种方式都导致只有15件物品的3秒钟挂起。从SQLite数据库中删除需要很长时间,导致挂起
什么是造成这种缓慢的行为,我该如何解决它?
正常删除方法
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
在第一个,为什么不断打开/关闭数据库?这就像是通过开店,购买牛奶,开车回家,放牛奶,开车回店铺,买面包,开车回家等来实现你的杂货店购物清单。 –
@CommonsWare:我会试试这个。你能解释为什么这会有帮助吗? MarcB:因为这是我用来删除单行的方法,它从来没有被设计用于删除多行,我只是试着快速实现。 – Timmiej93