Как библиотека Android SQLite разрешает конфликты, если я вставляю повторяющиеся строки? Я создаю свое приложение для уровня API 7, у которого, к сожалению, нет метода SQLiteDatabase.insertOnConflict()
, который был включен, начиная с уровня API 8.
Разрешение конфликтов в Android SQLiteDatabase
Ответ 1
В определении таблицы можно указать индекс UNIQUE, который позволит REPLACE: D:
CREATE TABLE mytable (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
UNIQUE (id) ON CONFLICT REPLACE
)
Если строка INSERT или UPDATE пытается добавить строку с уже существующим идентификатором, существующая строка будет заменена новой.
Ответ 2
В SQLite есть предложение ON CONFLICT
, которое вы можете сказать INSERT INTO ... ON CONFLICT...
.
Прочтите документацию, пожалуйста. http://www.sqlite.org/lang_conflict.html
Ответ 3
По умолчанию у вас есть уникальное исключение индекса, которое будет выбрано для дублированной вставки индекса. Общее решение - это наличие контрольной записи перед исполнением insert - псевдокод:
select * from people where name = 'Smith';
//if resultset is empty then perform insert
insert into people values 'Smith'