0

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

这就是我正在尝试的代码

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* * **这样的数字,或者只是像 81* * **这样的数字。我如何比较它们,不包括 + 和国家代码(+91)。请建议。

谢谢!

4

4 回答 4

1

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

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

您可以在此处查看更多文档。


使用libphonenumber图书馆。

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

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

于 2013-10-04T05:30:54.007 回答
1

将您的查询替换为:

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

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

于 2013-10-04T09:45:36.503 回答
0

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

Like '%contactNumber
replace with
Like '%contactNumber'
于 2013-10-04T05:01:56.483 回答
0

您需要在 like 表达式的末尾加上右引号:

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

希望这可以帮助 :)

于 2013-10-04T04:57:48.937 回答