我最初在SQLite中寻找INSERT OR UPDATE
能力,但搜索显示使用INSERT OR REPLACE
指向类似问题的人。
我显然误解了它是如何工作的,显然我不能使用WHERE
因为我得到以下SQLiteException ......
08-12 01:38:22.973: ERROR/AndroidRuntime(29242): FATAL EXCEPTION: main
08-12 01:38:22.973: ERROR/AndroidRuntime(29242): android.database.sqlite.SQLiteException:
near "WHERE":
syntax error:
INSERT OR REPLACE INTO SERVERS (
server_name,
service_uri_mobile,
service_uri_wifi,
valid_ssids,
username,password
) VALUES (
'Default',
'http://myserver.com:8790/',
'http://192.168.1.1:8790/',
'[]',
'admin',
'password')
WHERE server_name='Default'
我正在使用的SQL字符串如下......
String UpdateString = "INSERT OR REPLACE INTO SERVERS " +
"(server_name,service_uri_mobile,service_uri_wifi,valid_ssids,username,password) VALUES ('" +
locater.getServerName() + "','" +
locater.getServiceUriMobile().toString() + "','" +
locater.getServiceUriWifi().toString() + "','" +
locater.getValidSsids().toString() + "','" +
locater.getUsername() + "','" +
locater.getPassword() + "') " +
"WHERE server_name='" + locater.getServerName() + "'";
我看过this page解释REPLACE
,但不太明白。我如何重新编写上面的SQLite命令并让它只尝试替换server_name
匹配的记录(即相当于WHERE
子句)?
答案 0 :(得分:4)
查看文档(以及镜像问题下方的评论),REPLACE
{或更改名称} UPDATE
列时应使用UNIQUE
。即:
更换
发生UNIQUE约束违规时,使用REPLACE算法 删除导致约束违规的预先存在的行 在插入或更新当前行和命令之前 继续正常执行。