“WHERE”附近的Android数据库更新:语法错误

时间:2015-07-30 23:00:32

标签: android sqlite sql-update

我知道关于这个问题已经有太多问题了,相信我,我已经完成了自己的工作,阅读了找到解决方案的答案。不幸的是,我找不到我的错误

这是我的代码:

SQLiteDatabase db = getWritableDatabase();

ContentValues values = new ContentValues();
values.put("eat_it", 1);
values.put("expired", 1);
String[] args = {food.name, "0"};

db.update("foods", values, "name=? AND expired=?", args);
db.close();

我想做什么:

在表foods WHERE中查找列name = food.name的值以及列expired = 0的值。如果找到,SET记录的eat_it列到1expired列到1。如果没有找到记录,请不要做任何事情

这是我的创建表语法:

CREATE TABLE IF NOT EXISTS foods (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT,
    ...
    eat_it INTEGER DEFAULT 0,
    expired INTEGER DEFAULT 0
);

以下是错误消息:

...
 Caused by: android.database.sqlite.SQLiteException: near "WHERE": syntax error (code 1): , while compiling: UPDATE foods SET expired=?,eat_it=? WHERE name ='Taco Salad'WHERE expired = 0
...

感谢您的帮助

==== UPDATE ====

显然,在我重新启动计算机后,它运行起来了。我认为我的模拟器工作不正常/仍然有旧代码。谢谢大家的帮助

2 个答案:

答案 0 :(得分:2)

根据您的帖子返回的错误消息

  

靠近“WHERE”:语法错误(代码1):,同时编译:UPDATE食物   SET expired =?,eat_it =?名称='Taco Salad'WHERE已过期= 0

从错误声明中可以清楚地看出,您的查询中有两个WHERE子句,因此错误。

UPDATE foods SET expired=?,eat_it=? 
WHERE name ='Taco Salad'
WHERE expired = 0 <-- Here

您的UPDATE声明应该是

UPDATE foods SET expired=?,eat_it=? 
WHERE name ='Taco Salad'
AND expired = 0 

答案 1 :(得分:0)

您可以使用where语句而不使用'whereArgs',如下所示:

db.update("foods", values, "name="+food.name+" AND expired=0", null);

此外,由于您正在更新内部值,因此您还可以尝试一个简单的查询:

db.rawquery("UPDATE foods SET eat_it=1, expired=1 WHERE name="+food.name+" AND expired=0");

虽然你在那里写的内容应该没有任何问题,你可以尝试这两个选项来使其发挥作用。