我在SQLite数据库中有一个数据库Scheme:
CREATE TABLE AppRecord ( sno INTEGER PRIMARY KEY, version Text,fields Text, appname Text, appid Text, status Text, displayDetails Text, id Text);
我正在尝试使用以下查询更新我的记录
UPDATE AppRecord SET version ="16",
fields = "[{"lbl":"user","type":"text","required":true},
{"lbl":"age","max":100,"type":"text", "number":true, "required":true, "maxPrecision":2},
{"lbl":"address","type":"text", "multiline":true},
{"lbl":"date","type":"date","minDate":"3","maxDate":"3","required":true}]",
appname = "Sales",
appid = "sales",
status = "modified",
id = "52860e0d012bad414cc98162"
WHERE appid = "sales";
每当我尝试这样做时,它会给我一个语法错误说:
ERROR android.database.sqlite.SQLiteException: near "lbl": syntax error (code 1)
我尽力弄清楚错误,但我无法解决。任何帮助表示赞赏。
答案 0 :(得分:2)
您尝试将"
引号中的字符串值括起来fields
,但该值还包含"
引号。
转义"
的SQL方法是将其加倍为""
:
sqlite> create table foo(bar);
sqlite> insert into foo values("string with ""quotes"" embedded");
sqlite> select * from foo;
string with "quotes" embedded
更好的方法是使用parameter substitution。
在Android Java API中,这可以使用execSQL()
的bindArgs
参数,或者更方便地使用update()
ContentValues
whereArg
进行更新查询}对构造的更新查询的WHERE
部分执行相同的替换。)