2010-12-14 136 views
1

实际上,我不想接受已存储在数据库中的文本字段(即唯一值)中已输入的相同名称。如何将文本字段值与在文本字段中输入的数据库值进行比较

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

我在下面尝试,但它不工作。请帮帮我。在你的代码

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

回答

0

三个问题:

  • 你的函数有一个布尔返回类型,但在你的if声明的这两种情况下返回什么。也许你应该尝试返回一个合适的布尔值?

  • 你应该检查所有sqlite操作的错误。否则,他们会在你身上默默地失败,你的代码会简单地假设数据库中没有匹配的行 - 如果它没有错误发生那么远。

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

编辑:

按LadaRaider的答案,似乎也缺少在您的SQL查询几个空格。还有另一个原因而不是连接字符串来构建它。

0

“WHERE”字旁边没有空格。你写这个:

"SELECT * FROM restaurantsWHEREcategory=" + cat 

只需添加空格,它应该会更好。

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

+0

嘿,甚至没有注意到其他人之间...... – thkala 2010-12-14 10:25:39

相关问题