Каков наилучший способ обновления схемы sqlite и данных при обновлении программного обеспечения? - PullRequest
0 голосов
/ 20 ноября 2018

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

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

Есть предложения?

1 Ответ

0 голосов
/ 20 ноября 2018

В основном вам нужно что-то для сравнения в live базе данных с новой.

например, если вы добавляете таблицу, вы можете использовать SELECT * FROM sqlite_master WHERE name = your_new_table_name, чтобы увидеть, существует ли эта таблица.Однако вы можете использовать более простые CREATE TABLE IF NOT EXISTS ........

Новые столбцы с ограничениями, вы можете использовать ALTER TABLE your_existing_tablename ADD COLUMN you_new_column_definition (существующие данные сохраняются, если будет применяться значение по умолчанию).

Ограниченияявляются: -

  1. Столбец может не иметь ограничения PRIMARY KEY или UNIQUE.
  2. Столбец может не иметь значения по умолчанию CURRENT_TIME, CURRENT_DATE, CURRENT_TIMESTAMP илиВыражение в скобках.
  3. Если указано ограничение NOT NULL, то столбец должен иметь значение по умолчанию, отличное от NULL.
  4. Если включены ограничения внешнего ключа и столбец сПри добавлении предложения REFERENCES для столбца должно быть установлено значение по умолчанию NULL.

    • Обратите также внимание, что при добавлении ограничения CHECK ограничение CHECK не проверяется для уже существующих строк таблицы.Это может привести к таблице, содержащей данные, которые нарушают ограничение CHECK.Будущие версии SQLite могут измениться для проверки ограничений CHECK по мере их добавления.

SQL как понял SQLite - ALTER TABLE

Если столбец уже существует, то результатом будет сообщение о том, что столбец является дубликатом, например: -

ALTER TABLE ex01 ADD COLUMN col5 TEXT
> duplicate column name: col5
> Time: 0s

Вы всегда можете извлечь существующие столбцы, используя PRAGMA table_info(your_existing_table_name);, и продолжить, только еслиДобавляемый столбец не является одним из значений в столбце name набора результатов.

  • Обратите внимание, что приведенная выше ссылка предлагает другие способы обработкиболее сложные ситуации.

В Android стандартные методы SQLiteDatabase используют user_version (байты 60 63 в заголовке базы данных).) для хранения актуальной версиибаза данных, которая сравнивается с предоставленным значением.Если предоставленное значение больше, вызывается метод onUpgrade.

Заявления PRAGMA Формат файла базы данных

PS Asking Лучшее может привести к ответам, основанным на мнении, иногда приводя к горячим спорам и, следовательно, следует избегать запроса на Лучшее.Скорее спросите пути.

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