如何将文本字段值与在文本字段中输入的数据库值进行比较

时间:2010-12-14 09:31:04

标签: android sqlite

实际上,我不想接受已经在数据库中存储的文本字段中输入的相同名称(即唯一值)。

例如,我在文本字段中输入了名称“health”并保存了它。如果再次输入相同的名称,则不接受。

我在下面试过,但它不起作用。请帮帮我。

boolean ifExisting(String cat)
     {
      Cursor c = db.rawQuery("SELECT * FROM " + "restaurants" + "WHERE" + "category" + "=" + cat, null); 
         if(c.getCount() == 0)
         {
          return; 
         } 
          else
          {
           return;
          }
     }
       insert();

2 个答案:

答案 0 :(得分:0)

您的代码中有三个问题:

  • 您的函数有一个布尔返回类型,但在if语句的两种情况下,您都返回 nothing 。也许你应该尝试返回一个合适的布尔值?

  • 您应该检查所有sqlite操作是否有错误。否则它们将无声地失败,您的代码将简单地假设数据库中没有匹配的行 - 如果它没有错误那么远。

  • 通过连接字符串来构建SQL查询应该是非法的。这是一种非常不安全的做法,它会为SQL注入攻击等打开代码。如果您的用户在"italian"; delete from restaurants文本字段中输入cat会怎样?您应该使用托管参数来防范这种情况。

编辑:

根据LadaRaider的回答,您似乎也在SQL查询中缺少一些空格。另一个原因连接字符串来构建它。

答案 1 :(得分:0)

“WHERE”字词周围没有空格。你写的是这个:

"SELECT * FROM restaurantsWHEREcategory=" + cat

只需添加空格就可以了。

顺便说一下,由于用于解析字符串的时间,使用rawQuery非常慢。您应该查看android SDK samples /目录中的NotePad应用程序。