如何正确使用INSERT OR REPLACE?

时间:2011-08-12 00:48:08

标签: android sqlite

我最初在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子句)?

1 个答案:

答案 0 :(得分:4)

查看文档(以及镜像问题下方的评论),REPLACE {或更改名称} UPDATE列时应使用UNIQUE。即:

  

更换

     

发生UNIQUE约束违规时,使用REPLACE算法   删除导致约束违规的预先存在的行   在插入或更新当前行和命令之前   继续正常执行。

http://sqlite.org/lang_conflict.html