【问题标题】:SQL query with WHERE and LIKE not working带有 WHERE 和 LIKE 的 SQL 查询不起作用
【发布时间】:2013-10-10 23:54:43
【问题描述】:

您好,我正在开发一个 android 应用程序。我有一个数据库表 NUMBERRECEIVED,其中包含一个字段 phnnofrmDb VARCHAR。我需要将这些数据库号码与用户在文本视图中输入的电话号码进行比较。

这就是我正在尝试的代码

while (c.moveToNext()) 
{

    //phone number entered in text view
     **contactNumber** 

        db = openOrCreateDatabase("Test", 0, null);
        Cursor cur = db.rawQuery("SELECT count(*) FROM NUMBERRECEIVED ", null);
        if (cur.getCount() > 0)
        {
          Cursor cursor = db.rawQuery("SELECT phnnofrmDb FROM NUMBERRECEIVED WHERE phnnofrmDb Like '%contactNumber' ", null);
          if (cursor != null && cursor.moveToFirst()) 
          {
            phnnofrmDb = cursor.getString(cursor.getColumnIndex("phnnofrmDb "));

            if(phnnofrmDb.contains(r_address))
            {
                Log.e("same","true");

            }
            else if(!phnnofrmDb.contains(r_address))
            {
                Log.e("same","false");
            }
          }cursor.close();
        } cur.close();
         db.close();
}c.close();

但日志总是说“真实”。我可能在查询中出错了。请建议如何解决这个问题,用户可以输入 +9195** 或 +44**** 之类的数字strong> 或只是像 81**** 这样的数字。我如何比较它们,不包括 + 和国家代码(+91)。请提出建议。

谢谢!

【问题讨论】:

    标签: android sqlite android-sqlite sql-like where-in


    【解决方案1】:

    将您的查询替换为:

    Cursor cursor = db.rawQuery("SELECT phnnofrmDb FROM NUMBERRECEIVED WHERE phnnofrmDb Like '%'||?", new String[]{contactNumber});
    

    切勿在您的 SQL 语句中硬编码用户提供的字符串。

    【讨论】:

    • 什么是'||'在查询中表示?
    • || 是标准 SQL 和 SQLite 连接运算符
    • 不是 '%?'和'%'||?一样吗?
    • '%?' 是一个包含百分号和问号的字符串。 '%'||? 是一个包含百分号和从 SQL 参数读取的文本的字符串。
    【解决方案2】:

    PhoneNumberUtils 提供了多种方法来比较和格式化电话号码。

    在您的情况下,您可以使用 toCallerIDMinMatchgetStrippedReversed 函数。

    您可以查看更多文档here


    使用libphonenumber 库。

    Google 常用的 Java、C++ 和 Javascript 解析库, 格式化、存储和验证国际电话号码。

    https://code.google.com/p/libphonenumber/

    【讨论】:

      【解决方案3】:

      我认为您在查询中遗漏了 singlecot( ' )

      Like '%contactNumber
      replace with
      Like '%contactNumber'
      

      【讨论】:

      • 不,这不起作用。你能建议完整的查询进行比较吗。
      【解决方案4】:

      like 表达式的末尾需要一个右引号:

      "SELECT numberp FROM NUMBERRECEIVED WHERE phnnofrmDb Like '%contactNumber' "
      

      希望这会有所帮助:)

      【讨论】:

      • 什么?其他人都有相同的答案,虽然可能还有另一个问题,但这绝对是查询的问题......你为什么不投票?为什么不在这里投票给其他人?非常奇怪的行为。
      • 我只是觉得你不值得 +1 @jeet 给你。
      • 我想还不错。
      猜你喜欢
      • 2022-01-21
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-26
      • 1970-01-01
      • 2017-08-24
      相关资源
      最近更新 更多