Java 在迭代游标时从Android SQLite数据库中删除行安全吗

Java 在迭代游标时从Android SQLite数据库中删除行安全吗,java,android,sqlite,cursor,Java,Android,Sqlite,Cursor,例如: public void removeStaleMovies(Set<String> updatedMovieList) { Cursor cur = this.getReadableDatabase().rawQuery("SELECT id, title, year FROM movie", null); cur.moveToFirst(); while (!cur.isAfterLast()) { String title = cu

例如:

public void removeStaleMovies(Set<String> updatedMovieList) {
    Cursor cur = this.getReadableDatabase().rawQuery("SELECT id, title, year FROM movie", null);
    cur.moveToFirst();
    while (!cur.isAfterLast()) {
        String title = cur.getString(1);
        String year = cur.getString(2);
        if (!updatedMovieList.contains(title + "-" + year)) {
              // delete the row where 'id' = cur.getString(0)
              // OR, delete the row using the object at the cursor's current position, if that's possible
              // OR, if deletion isn't safe while iterating, build up a list of row id's and run a DELETE statement after iteration is finished    
        }

    }
}
public void removeStaleMovies(设置UpdateMovieList){
Cursor cur=this.getReadableDatabase().rawQuery(“选择id、标题、电影拍摄年份”,null);
cur.moveToFirst();
而(!cur.isAfterLast()){
字符串标题=cur.getString(1);
字符串年份=cur.getString(2);
如果(!updateMovieList.contains(title+“-”+年份)){
//删除“id”=cur.getString(0)的行
//或者,如果可能,使用光标当前位置的对象删除行
//或者,如果在迭代时删除不安全,则建立一个行id列表,并在迭代完成后运行DELETE语句
}
}
}

删除是否安全?还是会导致一些不可预测的行为?我知道,但我仍然不确定。

从代码安全的角度来看,假设查询的结果集小于1MB,这应该可以。在这种情况下,
游标
在堆空间中保存整个结果集,因此它与底层数据库的任何更改都是隔离的


也就是说,您可能希望建立一个要删除的行列表,这样您就可以在一条语句中删除它们,而不是在一堆单独的语句中删除它们(尽管在事务中包装这些单独的语句可能会提供类似的性能特征)。

我想您是在尝试按id删除电影?或您正在尝试删除哪些电影?数据库中不在提供的哈希集中的任何电影都应删除,以确保安全。但是,如果您可以在onceThanks上执行Delete语句来删除该行,则更好,这是非常有用的。看来我有几个选择。