0

私はAndroidを初めて使用し、最近このような問題に直面しました:

Android の連絡先データベース、具体的にはデータ テーブルを使用しています。新しい MIME タイプの情報をいくつか入れて、検索中にこの情報を探そうとしています。問題は、非ラテン文字の大文字と小文字を区別する SQLite LIKE 演算子を使用していることです。もう1つの問題は、データベースがAndroidに組み込まれているため、データベースを変更できないことです。

Builder builder = Data.CONTENT_URI.buildUpon();

loader.setSelection(getIndividualsSelection());
query = query.trim();
if( (null != query) && !query.equals("")){

    loader.setSelection(Data.MIMETYPE + "='" + 
        MY_MIMETYPE + "' " +   " AND  ( " + 
        MY_DATA_COLUMN + 
        " LIKE '"+ query + "%' " +
        specialCharsEscape + "  COLLATE NOCASE)");
    loader.setSelectionArgs(null);        
    loader.setUri(builder.build()); 
    loader.setProjection(MY_PROJECTION);
    loader.setSortOrder(MY_SORT_ORDER);

}

これはすべて、LoaderCallbacks の onCreateLoader 関数の内部にあり、ローダーは CursorLoader タイプです。SQLite で大文字と小文字を区別しないようにする方法を知っていますか?

もちろん、SQLite 関数 UCASE と LCASE を使用してみましたが、うまくいきません。正規表現を使用すると、このデータベースの例外が発生し、MATCH を使用することもできます...助けていただければ幸いです。

4

1 に答える 1

0

Android にはローカライズされた照合順序があります。

実際に比較に照合を使用できるようにするには、BETWEEN代わりにLIKE;を使用します。例えば:

MyDataColumn BETWEEN 'mąka' COLLATE UNICODE AND 'mąka' COLLATE UNICODE

UTF-8 でエンコード可能な最後の Unicode 文字です。Java 文字列は、おそらくサロゲート as でエンコードし"\uDBFF\uDFFF"ます。

UNICODE一部の Android バージョンでは、照合が壊れていることに注意してください。

于 2013-08-20T17:20:21.177 に答える