Russian Qt Forum

Qt => Базы данных => Тема начата: PinkPanther от Март 08, 2015, 16:32



Название: [РЕШЕНО] SQLite - INSERT, UPDATE, транзакции
Отправлено: PinkPanther от Март 08, 2015, 16:32
Здравствуйте.
Вопрос скорее не по Qt, а по SQLite, но так как любители Qt чаще всего используют SQLite, может быть, кто-то знает ответ.

Мое приложение при старте подгружает с сервера длинный список записей, в особом формате. Загруженный список парсится, данные вносятся в таблицу SQLite. Эта таблица необходима для работы приложения, без данных в ней оно бесполезно. Не самое изящное решение, но пока приложение работает именно так.

Ранее таблица SQLite чистилась, и все поля заполнялись по-новой. Вчера я включил транзакции (с целью ускорения), чистку таблицы выключил, а INSERT OR IGNORE поменял на UPDATE OR REPLACE. Сегодня в таблицу было добавлено 3 новых столбца, данных для которых в центральной базе нет, и которые были заполнены другим способом, раз и навсегда. При рестарте приложения команда UPDATE OR REPLACE прекрасно обновляет данные в таблице, но в новые столбцы вносит значения по умолчанию. Если я обновляю значения новых столбцов, приложение работает с ними до следующего перезапуска.

Вопрос: как оформить запрос SQLite, чтобы новые столбцы не теряли своих значений при UPDATE? При этом, если в таблице нет строки с данным ключом, нужно создать новую запись, заполнить данными, а новые столбцы заполнить значениями по умолчанию. Все это необходимо cделать средствами SQL, без дополнительной проверки, существует запись с нужным ключом в таблице, или нет.

PS Вроде решил, двумя запросами:
Сначала INSERT OR IGNORE (добавляющий новые строки), и тут же, с теми же данными, UPDATE (без OR), редактирующий некоторые поля в старых строках.