java – 迭代游标时从Android SQLite数据库中删除行是否安全

例如:

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    
        }

    }
}

删除安全吗?或者它会导致一些不可预测的行为?我知道this similar question,但我仍然不确定.

解决方法:

代码安全的角度来看,假设查询的结果集小于1MB,这应该没问题.在这种情况下,Cursor在堆空间中保存整个结果集,因此它与基础数据库的任何更改都是隔离的.

话虽这么说,你可能想要建立一个删除的行列表,这样你就可以在一个语句中删除它们,而不是一堆单独的语句(尽管在事务中包装那些单独的语句可能会给你类似的性能特征).

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...