СТОЛБЕЦ ADD к sqlite дб, ЕСЛИ НЕ СУЩЕСТВУЕТ - сгибает/передает sqlite?

У меня есть приложение гибкого провода/воздуха, я продолжал работать, оно использует локальную sqlite базу данных, которая создается на начальном приложении, запускаются.

Я добавил некоторые опции к приложению, и в процессе я должен был добавить новое поле к одной из таблиц базы данных. Мои вопросы состоят в том, как я иду о том, чтобы заставлять приложение создать одно новое поле, которое расположено в таблице, которая уже существует?

это - строка, которая составляет таблицу

stmt.text = "CREATE TABLE IF NOT EXISTS tbl_status ("+"status_id INTEGER PRIMARY KEY AUTOINCREMENT,"+" status_status TEXT)";

И теперь я хотел бы добавить status_default поле.

спасибо!

Спасибо - MPelletier

Я имею, добавляет код, который Вы предоставили, и он действительно добавляет поле, но теперь в следующий раз я перезапускаю свое приложение, я уже получаю ошибку - 'status_default' exists'.

Таким образом, как я могу пойти о добавлении своего рода, ЕСЛИ оператор NOT EXISTS к строке Вы обеспечили?

12
задан Yogesh Suthar 3 June 2013 в 10:52
поделиться

1 ответ

ALTER TABLE tbl_status ADD COLUMN status_default TEXT;

http://www.sqlite.org/lang_altertable.html

При этом добавление столбцов в SQLite ограничено. Вы не можете добавить столбец куда-либо, кроме как после последнего столбца в вашей таблице.

Что касается проверки того, существует ли уже колонка, PRAGMA table_info(tbl_status); вернет таблицу со списком различных колонок вашей таблицы.

ДОПОЛНЕНИЕ:

Я использую стратегию проектирования базы данных, которая позволяет мне различать, какие модификации необходимы. Для этого вам понадобится новая таблица (назовем ее DBInfo), с одним полем (Integer, назовем ее SchemaVersion). В качестве альтернативы в SQLite есть внутреннее значение user_version, которое можно задать командой PRAGMA . Ваш код может при запуске программы проверять номер версии схемы и применять изменения соответственно, по одной версии за раз.

Предположим, есть функция с именем UpdateDBSchema(). Эта функция проверит версию схемы вашей базы данных, обработает отсутствие DBInfo и определит, что база данных находится в версии 0. Остальная часть этой функции может быть просто большим переключателем с различными версиями, вложенным в цикл (или другую структуру, доступную для вашей платформы по выбору).

Итак, для этой первой версии есть функция UpgradeDBVersion0To1(), которая создаст новую таблицу (DBInfo), добавит ваше поле status_default и установит SchemaVersion в 1. В коде добавьте константу, которая указывает на последнюю версию схемы, скажем LATEST_DB_VERSION, и установите ее в 1. Таким образом, ваш код и ваша база данных имеют версию схемы, и вы знаете, что их нужно синхронизировать, если они не равны.

Когда вам понадобится внести очередное изменение в схему, установите константу LATEST_DB_VERSION в 2 и создайте новую функцию UpgradeDBVersion1To2(), которая выполнит необходимые изменения.

Таким образом, ваша программа может быть легко перенесена, может подключаться к старой базе данных и обновлять ее, и т.д.

32
ответ дан 2 December 2019 в 04:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: