简体   繁体   English

在Android中的SQLite中删除具有多个条件的字符串行的最佳方法

[英]Best way to delete string rows with multiple conditions in SQLite in Android

I have a database and in one of its tables i am storing paths to documents.我有一个数据库,在其中一个表中我存储了文档的路径。 Time from time i need to delete rows with specific extensions.有时我需要删除具有特定扩展名的行。 I have an array with extensions and i am deleting rows from my db in this way我有一个带有扩展名的数组,我正在以这种方式从我的数据库中删除行

public void deletePathsExceptThis(String [] extensions){
    SQLiteDatabase db = getWritableDatabase();
    String query = "";
    for (int i=0; i< extensions.length-1; i++){
        query = query.concat(" LOWER(" + ALL_DOCUMENTS_PATH + ") NOT LIKE ('");
        query = query.concat(extensions[i]);
        query = query.concat("') OR ");
    }
    query = query.concat(" LOWER(" + ALL_DOCUMENTS_PATH + ") NOT LIKE ('");
    query = query.concat(extensions[extensions.length-1]) ;
    query = query.concat("')");
    db.delete(TABLE_ALL_DOCUMENTS, query, null);
}

But i am wondering, may be there are some more fast, productive or elegant ways to do that job?但我想知道,是否有一些更快速、更高效或更优雅的方法来完成这项工作? Thanks谢谢

you could try to use near the same GLOB word你可以尝试使用接近相同的GLOB

https://www.sqlite.org/lang_expr.html#glob https://www.sqlite.org/lang_expr.html#glob

but this yeilds near the same result.但这产生了接近相同的结果。

Or write your own regexp method.或者编写自己的正则表达式方法。

https://www.sqlite.org/lang_expr.html#regexp https://www.sqlite.org/lang_expr.html#regexp

but nevertheless I have to optimize your code:但是我必须优化您的代码:

public void deletePathsExceptThis(String [] extensions){
    if  (extensions == null || extensions.length == 0)
            return;
    SQLiteDatabase db = getWritableDatabase();
    StringBuilder query = new StringBuilder();
    for (int i = 0; i < extensions.length; i++){
       query.concat(" LOWER(").append(ALL_DOCUMENTS_PATH).append(") NOT LIKE ('");
       query.append(extensions[i].replaceAll("'","''"));
        String ext = i == extensions.length - 1 ? "" : " OR ";
       query.append("')").append(ext);
    }
    db.delete(TABLE_ALL_DOCUMENTS, query.toString(), null);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM