добавление уже существующей строки в sqlite3 без получения исключения - PullRequest
0 голосов
/ 08 ноября 2011

Я получил sqlite DB в моем приложении для Android, чтобы сохранить резервирование.Одна из таблиц содержит заголовок каждого резервирования, который может содержать несколько частей резервирования, каждое резервирование имеет RES_ID, в то время как каждая часть имеет PART_ID, основная таблица содержит только RES_ID в качестве первичного ключа, у меня есть другие таблицы, которые содержат части вкаждый из них PART_ID и RES_ID являются первичными ключами

У меня есть случай, в котором я вставляю несколько объектов детали в БД, так что в конечном итоге я пытаюсь вставить две или более строки с одинаковым RES_ID вТаблица.естественно, я получаю SQLiteException, ограничиваю нарушение, так как уже есть строка с этим первичным ключом.

Есть ли оператор SQL или метод java \ const, который уведомит SQLite о том, что сбой в порядке, и я не хочу исключения?(только для этой таблицы)

Ответы [ 4 ]

1 голос
/ 15 ноября 2011

Как отмечают другие, возможно иметь многоколонные первичные ключи.Однако следует отметить, что если у вас есть некоторые функциональные зависимости, которые не вводятся ключом, вы должны рассмотреть вопрос о нормализации вашего отношения.http://en.wikipedia.org/wiki/Database_normalization

Или вы можете использовать уникальный ключ в вашей таблице.http://www.w3schools.com/sql/sql_unique.asp

1 голос
/ 14 ноября 2011

Разве это не должно работать:

INSERT ((ВЫБРАТЬ v1 AS c1, v2 AS c2, ..., vn AS cn), ИСКЛЮЧИТЬ имя таблицы) INTO имя таблицы;

или похожие:

INSERT ((ВЫБЕРИТЕ v1 AS c1, v2 AS c2, ..., vn AS cn), ГДЕ НЕ СУЩЕСТВУЕТ (ВЫБЕРИТЕ * ИЗ ИМЕНИ ТАБЛИЦЫ, ГДЕ pkc1 = pkv1 И pkc2 = pkv2 И ... И pkcj = pkvj)) INTO имя_таблицы;

0 голосов
/ 08 ноября 2011

Возможно, есть и другой способ, но использование замены вместо INSERT будет хорошо работать.С помощью консольного клиента sqlite3 я смог вставить несуществующую строку в обсуждаемую таблицу.Если строка уже существует, значения будут обновлены в любом случае.

10x Джефф и janoliver!

0 голосов
/ 08 ноября 2011

Когда я правильно понял ваш вопрос, вы ищете insert or replace. Нажмите

replace является сокращением для этого.

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