У меня есть приложение гибкого провода/воздуха, я продолжал работать, оно использует локальную 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 к строке Вы обеспечили?
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()
, которая выполнит необходимые изменения.
Таким образом, ваша программа может быть легко перенесена, может подключаться к старой базе данных и обновлять ее, и т.д.