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

时间:2012-09-24 13:36:31

标签: android sqlite

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

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

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

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

3 个答案:

答案 0 :(得分: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);

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

答案 1 :(得分: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);

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

答案 2 :(得分:0)

Cursor cursor = this.db.query("UserTbl", new String[] {"UserId",
                        "Username", "Password" },
                        "Username = ? COLLATE NOCASE AND Password = ? COLLATE NOCASE", new String[] { userNameString,
                                passwordString }, null, null, null);
相关问题