WHERE和LIKE的SQL查询无法正常工作

时间:2013-10-04 04:55:54

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

您好我正在开发一个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();

但Log总是说“真实”。我可能在查询中出错了。请建议如何解决此问题,用户可以输入+ 9195 * * 或+ 44 * * **等数字或只是81 * * ** 之类的数字。除了+和国家代码(+91)之外,我如何比较它们。请建议。

谢谢!

4 个答案:

答案 0 :(得分:1)

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

在您的情况下,您可以使用toCallerIDMinMatchgetStrippedReversed功能。

您可以查看文档here


使用libphonenumber库。

  

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

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

答案 1 :(得分:1)

将您的查询替换为:

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

永远不要在SQL语句中硬编码用户提供的字符串。

答案 2 :(得分:0)

在类似表达式的末尾需要一个右引号:

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

希望这会有所帮助:)

答案 3 :(得分:0)

我认为你在查询中错过了singlecot(')

Like '%contactNumber
replace with
Like '%contactNumber'