Android - 在国际字符上使用LIKE和UPPER进行Sqlite搜索

时间:2013-02-11 16:58:31

标签: android sqlite android-contacts android-cursor

我目前正在尝试在联系人数据库上运行搜索,并且我传入的值与联系人中的显示名称相匹配,我想返回一个匹配的联系人数量的光标。

目前除了国际字符外,这个工作正常,以下是我的代码当前看起来如何使用从EditText获取的CharSequence:

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中缺少这项工作。或者在插入数据库时​​使用整理。但是,由于我只是从联系人内容提供商处阅读,因此这不是我的选择。

是否有人知道如何在上面的代码中使用国际字符进行搜索而不区分大小写?

0 个答案:

没有答案