【问题标题】:How do I make a case insensitive query with ContentResolver in Android?如何在 Android 中使用 ContentResolver 进行不区分大小写的查询?
【发布时间】:2012-09-24 13:36:30
【问题描述】:

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

此查询仅获取大小写也匹配的行。

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

我已经阅读了关于使用 lower('xx') 的 sql 的 WHERE 子句,但我不知道如何使用它。我还向您学习了可以使列在创建表时不关心大小写,但是那艘船已经航行了。

【问题讨论】:

  • 也许用" LIKE ?" 替换"=?" 可行。
  • 它是“你的”内容提供者吗(你可以访问它的源代码)?

标签: android sqlite


【解决方案1】:

也试试

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

【讨论】:

  • 这避免了lower函数的开销;如果索引也是用COLLATE NOCASE 创建的,它可以使用索引。
  • COLLATE NOCASE 不适用于所有语言环境,例如它不适用于西里尔语
【解决方案2】:

请尝试(我认为邮件是字符串对象):

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);

【讨论】:

    【解决方案3】:
    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);
    

    【讨论】:

    • 这是一个有用的答案吗?这没有像问题中那样使用内容解析器,甚至 COLLATE NOCASE 已经在最高投票的答案中提出。
    猜你喜欢
    • 2011-10-23
    • 1970-01-01
    • 2019-05-21
    • 2021-08-05
    • 2011-10-29
    • 1970-01-01
    • 2014-04-29
    • 2013-11-08
    相关资源
    最近更新 更多