2017-02-01 9 views
-2

私はデータベースを持っており、そのテーブルの1つに文書へのパスを保存しています。時間から私は特定の拡張子を持つ行を削除する必要があります。私は拡張子を持つ配列を持っていると私は、このようにAndroidのSQLiteで複数の条件を持つ文字列を削除する最も良い方法

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); 
} 

を私のデシベルから行を削除することですが、私は疑問に思って、その仕事をするためにいくつかのより多くの、高速で生産性やエレガントな方法があることがありますか?おかげ

+3

さて、手始めのために、私は 'StringBuilder'は[SQLiteQueryBuilderもありString.concat' –

+0

'よりも好ましいと思います](https://developer.android.com/reference/android/database/sqlite/SQLiteQueryBuilder.html) - 気にしない - SELECT ... – Fildor

+0

にのみ適しているので、StringBuilderは高速になりますか?私はconcatがStringBuilderを使用するよりも時間がかかったところで比較を見たので、 – Fedor

答えて

1

あなたが同じGLOB単語

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

近くで使用しようとすることができますが、同じ結果に近いこのyeilds。

または独自のregexpメソッドを記述してください。

https://www.sqlite.org/lang_expr.html#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); 
} 
+0

答えてくれてありがとう。 – Fedor

+0

@Fedor、それが参考になったときに承認する。 'String'は' StringBuilders'よりはるかに遅いです。 'concat'メソッドと' append'もあります。 'Concat'は巨大なStringクラスをたくさん作成し、コピーします。 – Vyacheslav

+0

おかげで、私はconcatがより速いと考えて間違っていました。しかし、一般的に私の解決策は、削除要求を作成すると、複数の条件で文字列の行を削除するのに適していますか? – Fedor

関連する問題