Подтвердить что ты не робот

Android SQLite - что делает SQLiteDatabase.replace() на самом деле?

Мне нужна процедура 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() вообще, может кто-нибудь объяснить, что это за цель?

4b9b3361

Ответ 1

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

Ответ 2

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