2011-11-08 5 views
0

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

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

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

+0

Когда я получу ваш вопрос правильно, вы ищете вставку или замену. http://www.sqlite.org/lang_replace.html – janoliver

+0

Я уже делаю вставку, но так как у меня есть два объекта с одним и тем же RES_ID, я получаю исключение для нарушения ограничений. если я буду использовать обновление, но строка не существует, но я получу другое исключение, насколько я знаю. – codeScriber

+0

Так что используйте вставку или замену, и она заменяет уже существующую строку или вставляет ее, если ее нет ... – janoliver

ответ

0

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

replace является ярлыком для этого.

+0

Действительно ли это ответ? –

+0

Было принято в качестве одного ... –

0

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

10x Jeff and janoliver!

1

Не следует ли эта работа:

INSERT ((SELECT v1 AS c1, c2 v2 AS, ..., Vn AS сп) КРОМЕ имя_таблицы) INTO имя_таблицы;

?

Или похожи:

INSERT ((SELECT v1 AS c1, c2 v2 AS, ..., Vn AS сп) WHERE NOT EXISTS (SELECT * FROM имя_таблицы WHERE PKC1 = pKV1 И pkc2 = pkv2 И .. . И pkcj = pkvj)) INTO tablename;

?

+0

это могло сработать! – codeScriber

1

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

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

+1

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

Смежные вопросы