Android-Sqlite在国际字符上使用LIKE和UPPER进行搜索
我目前正在尝试对contacts数据库进行搜索,如果传入的值与contacts中的显示名称匹配,我将返回一个带有匹配联系人数量的光标 目前,除国际字符外,这一切正常,以下是我的代码当前的外观,约束是从EditText中获取的字符序列:Android-Sqlite在国际字符上使用LIKE和UPPER进行搜索,android,sqlite,android-contacts,android-cursor,Android,Sqlite,Android Contacts,Android Cursor,我目前正在尝试对contacts数据库进行搜索,如果传入的值与contacts中的显示名称匹配,我将返回一个带有匹配联系人数量的光标 目前,除国际字符外,这一切正常,以下是我的代码当前的外观,约束是从EditText中获取的字符序列: String[] PROJECTION = new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLA
String[] PROJECTION = new String[] {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.HAS_PHONE_NUMBER,
};
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
public Cursor runQuery(CharSequence constraint) {
String SELECTION = "UPPER(" + ContactsContract.Contacts.DISPLAY_NAME + ")"
+ " LIKE UPPER('%" + constraint+ "%') " + "and " + ContactsContract.Contacts.DISPLAY_NAME + " IS NOT NULL"
+ " AND " + ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'";
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
PROJECTION, SELECTION, null, sortOrder);
return cur;
}
正如我所说,这很好,因为我希望搜索不区分大小写,因此用户不必键入确切的名称,使用普通英文名称,这很好,但是一旦引入了国际字符,搜索就会区分大小写
我做了一些研究,表明sqlite需要一个ICU插件来完成Android所缺少的工作。或在插入数据库时使用校对。但是,由于我只从联系人内容提供商处阅读,因此这不是我的选择
是否有人知道如何让上述代码中的搜索在不区分大小写的情况下使用国际字符?能否与大家分享一个适合您的解决方案