我知道关于这个问题已经有太多问题了,相信我,我已经完成了自己的工作,阅读了找到解决方案的答案。不幸的是,我找不到我的错误
这是我的代码:
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
列到1
和expired
列到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 ====
显然,在我重新启动计算机后,它运行起来了。我认为我的模拟器工作不正常/仍然有旧代码。谢谢大家的帮助
答案 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");
虽然你在那里写的内容应该没有任何问题,你可以尝试这两个选项来使其发挥作用。