2013-08-20 23 views
0

接觸,我在Android相當新的,最近我面臨這樣的問題:使用的是Android聯繫人數據庫,特別是數據表無效的搜索結果,同時尋求與非拉丁字符

林。我在那裏給新的mimetype添加一些信息,並在搜索過程中試圖尋找這些信息。問題是,我正在使用非拉丁字符的大小寫敏感的SQLite LIKE運算符。另一個問題是我無法以任何方式更改數據庫,因爲它是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 funcion,其中加載器是CursorLoader型的。你有什麼想法如何強制我的SQLite不區分大小寫?

我試過使用SQLite函數UCASE和LCASE,但它不起作用。使用正則表達式導致此數據庫的異常以及使用MATCH ...將不勝感激任何幫助。

回答

0

Android有localized collations

要真正能夠使用排序規則進行比較,請使用BETWEEN而不是LIKE;例如:

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

是最後UTF-8-可編碼的Unicode字符;一個Java字符串可能會用替代品編碼爲"\uDBFF\uDFFF"

請注意UNICODE排序規則在某些Android版本中被打破。

+0

如何使用BETWEEN比較兩個字符串?例如,我想讓我的代碼在data1中鍵入mĄka時找到與mąka的聯繫。 – MichalCz

+0

解決方案不起作用。它不返回匹配的不區分大小寫的記錄,它不返回任何內容。 – MichalCz