从 SQLite 数据库中删除需要很长时间,导致挂起
Removeing from SQLite database takes a long time, causing hangs
我在我的应用程序中使用 SQLite 数据库。对于特定操作,我想删除特定 table 中的多个(可能很多,最多大约一百个)条目。我已尝试通过在 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();
}
作为 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();
}
我在我的应用程序中使用 SQLite 数据库。对于特定操作,我想删除特定 table 中的多个(可能很多,最多大约一百个)条目。我已尝试通过在 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();
}
作为 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();
}