Как обновить приложение sqlite на iPhone - PullRequest
2 голосов
/ 17 июня 2011

У меня есть приложение для iPhone, которое использует базу данных sqlite3 для сохранения данных, и прежде чем выпускать приложение, я должен быть уверен, что некоторые данные таблиц (которые пользователь сохранил) должны быть скопированы в новую базу данных.

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

Ответы [ 2 ]

1 голос
/ 17 июня 2011

Один из способов сделать это состоит в том, чтобы в вашей базе данных была таблица, содержащая версию схемы базы данных.

Когда у пользователя есть база данных в папке документов (которая, вероятно, была скопирована из предварительно созданной базы данных)из пакета приложения) необходимо внести изменения в эту базу данных, чтобы синхронизировать ее с текущей схемой.Это включает в себя обновление схемы и любых измененных данных.

Вы можете сделать это, связав в своем приложении несколько сценариев sql, которые приведут схему базы данных пользователей вперед на один шаг за раз, например:

  1. Чтение версии схемы из базы данных пользователей => 3 (текущее значение 5)
  2. Выполнение сценария sql "schema_3_to_4.sql"
  3. Выполнение сценария sql "schema_4_to_5.sql"
  4. Все готово - готово к использованию

Если у вас нет версии схемы в вашей текущей базе данных, просто посчитайте это версией 0 и добавьте таблицу в обновление вашей версии 1, например:

begin exclusive transaction;

create table schema (version integer);
insert into schema(version) values (1);

create table temp_update as select * from question;
drop table question;
create table question(id INTEGER PRIMARY KEY, new_answer INTEGER);
insert into question(id, new_answer) select id, 42 from temp_update;
drop table temp_update;

commit;
0 голосов
/ 17 июня 2011

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

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

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