Чтобы предотвратить вставку дубликата, вам нужно две вещи:
Определение таблицы, которая определяет столбцы как уникальные. Например:
CREATE TABLE Query (
SystemId INTEGER,
TopicId INTEGER,
DocumentId INTEGER,
PRIMARY KEY (SystemId, TopicId, DocumentId));
или
CREATE TABLE Query (
SystemId INTEGER,
TopicId INTEGER,
DocumentId INTEGER,
PRIMARY KEY (SystemId, TopicId, DocumentId));
И конфликтное предложение . Вы можете сделать это одним из двух способов, либо в своем определении таблицы (оставив его, как указано выше, по умолчанию установите значение IGNORE, что вам очень нужно), либо в вашей команде вставки:
INSERT OR IGNORE INTO Query...
Если вы настроили таблицу с ограничением UNIQUE, вам действительно не нужно изменять запрос INSERT (кроме удаления заведомо некрасивого WHERE NOT EXISTS
бита.
Недостаток в том, что да, он заставляет ваш код пытаться выполнить всевозможные вставки и завершиться неудачно. Но посмотрите на это по-другому: ваша база данных будет вести себя так, как вы хотите. И это ключ к работе с базами данных, вам не нужно выполнять полное сканирование всех таблиц вручную, когда вы выполняете операцию. Вы хотите, чтобы база данных сделала грязную работу.