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

Java 在Android中删除SQLite中具有多个条件的字符串行的最佳方法,java,android,sqlite,Java,Android,Sqlite,我有一个数据库,在它的一个表中存储了指向文档的路径。有时我需要删除具有特定扩展名的行。我有一个带有扩展名的数组,我正在以这种方式从数据库中删除行 public void deletePathsExceptThis(String [] extensions){ SQLiteDatabase db = getWritableDatabase(); String query = ""; for (int i=0; i< extensions.length-1; i++){

我有一个数据库,在它的一个表中存储了指向文档的路径。有时我需要删除具有特定扩展名的行。我有一个带有扩展名的数组,我正在以这种方式从数据库中删除行

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);
}
public void deletepathsceptthis(字符串[]扩展名){
SQLiteDatabase db=getWritableDatabase();
字符串查询=”;
对于(int i=0;i

但我想知道,有没有更快捷、高效或优雅的方法来完成这项工作?谢谢

您可以尝试使用几乎相同的
GLOB
单词

但这几乎是同样的结果

或者编写自己的regexp方法

但无论如何,我必须优化您的代码:

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);
}
public void deletepathsceptthis(字符串[]扩展名){
if(extensions==null | | extensions.length==0)
返回;
SQLiteDatabase db=getWritableDatabase();
StringBuilder查询=新建StringBuilder();
for(int i=0;i
首先,我认为
StringBuilder
String更受欢迎。concat
甚至还有一个-Nevermind-只适用于SELECT…所以StringBuilder会更快吗?因为我看到一些比较,concat比使用StringBuilderHanks花费的时间要少。)@Fedor,如果有帮助,请批准<代码>字符串
字符串生成器
慢得多。甚至
concat
方法与
append
Concat
多次创建和复制大型字符串类。谢谢,我误认为Concat更快。但一般来说,我创建删除请求的解决方案适合于删除具有多个条件的字符串行?@Fedor,我还没有测试过这一点。但是,imho,是的。
db.delete(TABLE\u ALL\u DOCUMENTS,
join
“LOWER(“+ALL\u DOCUMENTS\u PATH+”)不象?”
扩展名。长度
乘以
扩展名)