Android "WHERE" 附近的数据库更新:语法错误
Android DB Update near "WHERE": syntax error
我知道关于这个的问题已经太多了,相信我,我已经尽我所能阅读答案以找到解决方案。不幸的是,我找不到我的错误
这是我的代码:
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();
我想做的事情:
在tablefoods
WHERE
列的值name
=food.name
和expired
列的值中查找一条记录= 0
。如果找到,SET
记录的 eat_it
列到 1
和 expired
列到 1
。如果没有找到记录,什么都不做
这是我创建的 table 语法:
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
...
感谢您的帮助
====更新====
显然在我重新启动计算机后它就可以工作了。我认为我的模拟器工作不正常/仍然有旧代码。感谢大家的帮助
根据您的 post
返回的错误消息
near "WHERE": syntax error (code 1): , while compiling: UPDATE foods
SET expired=?,eat_it=? WHERE name ='Taco Salad'WHERE expired = 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
您可以在不使用 'whereArgs' 的情况下使用 where 语句,如下所示:
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");
虽然你在那里写的应该没有问题,但你可以尝试这两个选项来使它起作用。
我知道关于这个的问题已经太多了,相信我,我已经尽我所能阅读答案以找到解决方案。不幸的是,我找不到我的错误
这是我的代码:
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();
我想做的事情:
在tablefoods
WHERE
列的值name
=food.name
和expired
列的值中查找一条记录= 0
。如果找到,SET
记录的 eat_it
列到 1
和 expired
列到 1
。如果没有找到记录,什么都不做
这是我创建的 table 语法:
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
...
感谢您的帮助
====更新====
显然在我重新启动计算机后它就可以工作了。我认为我的模拟器工作不正常/仍然有旧代码。感谢大家的帮助
根据您的 post
返回的错误消息near "WHERE": syntax error (code 1): , while compiling: UPDATE foods SET expired=?,eat_it=? WHERE name ='Taco Salad'WHERE expired = 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
您可以在不使用 'whereArgs' 的情况下使用 where 语句,如下所示:
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");
虽然你在那里写的应该没有问题,但你可以尝试这两个选项来使它起作用。