如何在Android中使用ContentResolver进行不区分大小写的查询?

jay*_*kay 11 sqlite android

我的目标是从Android Gingerbread及更高版本的特定电子邮件地址获取本机数据库中的所有行.

此查询仅获取案例也匹配的行.

Cursor cursor = context.getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
            new String[] {Contacts._ID}, ContactsContract.CommonDataKinds.Email.ADDRESS + "=?",
            new String[] {email}, null);
Run Code Online (Sandbox Code Playgroud)

我已经读过有关sql的WHERE子句,其中一个使用lower('xx'),但我无法弄清楚如何使用它.另外我学会了你可以让列在创建表时不关心案例,但是这艘船已经航行了.

sam*_*hna 21

也试试

Cursor cursor = context.getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
            new String[] {Contacts._ID}, ContactsContract.CommonDataKinds.Email.ADDRESS + "=? COLLATE NOCASE",
            new String[] {email}, null);
Run Code Online (Sandbox Code Playgroud)

请注意,COLLATE NOCASE在查询中添加了.

  • COLLATE NOCASE不适用于所有语言环境,例如它不适用于cyrilic (4认同)

ra.*_*ra. 8

请尝试(我想邮件是String对象):

Cursor cursor = context.getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
        new String[] {Contacts._ID}, "lower("+ContactsContract.CommonDataKinds.Email.ADDRESS + ")=lower('"+ email +"')",
        null, null);
Run Code Online (Sandbox Code Playgroud)

要么

Cursor cursor = context.getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
        new String[] {Contacts._ID}, "lower("+ContactsContract.CommonDataKinds.Email.ADDRESS + ")=lower('"+ email +"')",
        new String[] {}, null);
Run Code Online (Sandbox Code Playgroud)