Как правильно использовать INSERT OR REPLACE? - PullRequest
3 голосов
/ 12 августа 2011

Первоначально я искал возможность INSERT OR UPDATE в SQLite, но поиски показали, что похожие спрашивающие задают вопрос об использовании 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() + "'";

Я смотрел на эта страница объясняет REPLACE, но не совсем понимаю.Как мне переписать приведенную выше команду SQLite и попытаться заменить только запись, в которой совпадает server_name (т. Е. Эквивалент предложения WHERE)?

1 Ответ

4 голосов
/ 12 августа 2011

Глядя на документацию (и отражая комментарии под вопросом), REPLACE следует использовать при UPDATE изменении (или, другими словами, изменении) столбцов, которые UNIQUE.То есть:

REPLACE

Когда происходит нарушение ограничения UNIQUE, алгоритм REPLACE удаляет ранее существующие строки, которые вызывают нарушение ограничения, перед вставкой или обновлением текущей строки икоманда продолжает выполняться нормально.

http://sqlite.org/lang_conflict.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...