Android SQLite - что на самом деле делает SQLiteDatabase.replace ()? - PullRequest
32 голосов
/ 02 ноября 2011

Мне нужно выполнить процедуру INSERT или UPDATE IF EXIST с моей базой данных. Я читал, что .replace() был путь. Он вставляет новые записи просто отлично, но если запись уже существует, он не обновляет ее.

У меня есть что-то вроде этого:

ContentValues values = new ContentValues();
values.put(ID, 1);
values.put(NAME, "bob");
values.put(VISIBLE, true);
db.replace("peopleTable", null, values);

Если я запускаю этот код, когда этой записи нет в базе данных, то создается впечатление, что она прекрасно создается, как если бы я делал insert(). Но если я изменю NAME на "john" или что-то в этом роде, и снова запускаю replace(), запись не обновляется.

Согласно документации, вот синтаксис:

public long replace (String table, String nullColumnHack, ContentValues initialValues)

Почему это называется initalValues? Означает ли это, что эти значения используются только тогда, когда запись не существует, и она будет вставлена? Если да, то как вы используете метод для обновления записи? Где вы указываете новые значения?

Если я неправильно понимаю, что вообще делает replace(), может кто-нибудь объяснить, для чего он предназначен?

Ответы [ 2 ]

30 голосов
/ 02 ноября 2011

Насколько я понимаю, replace() работает так же, как ключевое слово SQLite REPLACE - строка будет обновлена, если произойдет нарушение уникального ограничения для вставки.Таким образом, столбец ID в вашем примере должен иметь ограничение PRIMARY KEY в схеме базы данных для обновляемой строки.

5 голосов
/ 10 августа 2014

Метод replace () фактически выполняет команду sql insert or replace into (...) values (...)

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