实际上,我不想接受已经在数据库中存储的文本字段中输入的相同名称(即唯一值)。
例如,我在文本字段中输入了名称“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 :(得分: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应用程序。