Как перезаписать БД SQLite в iOS, когда выйдет новая версия приложения - PullRequest
6 голосов
/ 15 июня 2011

У меня есть приложение для iOS, которое использует базу данных SQLite для хранения своей модели данных. Пользователь не может каким-либо образом изменять содержимое этой БД. Единственный способ, которым содержимое БД изменится, это когда я добавлю больше контента в будущих обновлениях приложения. (Приложение никогда не записывает контент в БД, только читает из него)

Итак, когда я выполняю такое обновление, я хочу, чтобы оно использовало «более новую» версию БД в новой версии, которую я создаю, и просто избавилось от старой БД. Какой лучший способ пойти по этому поводу? Есть ли простой способ сказать ему, чтобы он получал новую версию БД при обновлении, или для этого нужно программировать в специальной логике?

Ответы [ 3 ]

4 голосов
/ 13 марта 2012

Давайте обсудим, с самого начала ваше приложение было установлено впервые. Sqlite db будет инициализирован в следующих шагах:

  1. Проверьте, существует ли [appname] .db в папке установки приложения.

  2. Создайте пустой файл [appname] .db в папке установки, если этот файл не существует.

  3. Создайте запись, чтобы указать текущую версию приложения, и сохраните ее в таблице с именем «appversion» (это также можно сохранить в файле настроек).

  4. Загрузить старый номер версии из того места, где вы его сохранили на шаге 3, сравните его с текущим номером версии, и вам нужно выполнить файлы sqal serval с такими именами, как '[appname] _sql_v1.sql, [appname] _sql_v2.sql, [appname] _sql_v3.sql', имейте в виду, что каждый выпуск будет файл '[appname] _sql_v * .sql', содержащий все изменения схемы таблицы и записи изменений. Если ваше приложение было обновлено до версии 7, в пакете приложения вы найдете 7 файлов sql.

  5. Давайте предположим, что какой-то парень установил приложение с версией 2, но не обновил его до тех пор, пока однажды он / она не обнаружит текущую версию 7, а затем не обновит ее до 7. Номер версии двух кодов будет быть загруженным, когда он / она запустили приложение в первый раз после завершения обновления: 2 и 7, поэтому эти файлы sql: [appname] _sql_v3.sql, [appname] _sql_v4.sql, [appname] _sql_v5.sql, [appname ] _sql_v6.sql, [appname] _sql_v7.sql будет выполняться один за другим.

Запомните эти вещи:

1.Не ставьте SQL-оператор init в коде, помещайте его в SQL-файл и читайте в sqlite db. по мере необходимости.

2.Каждому изданию будет принадлежать файл '[appname] _sql_v * .sql', содержащий изменения, внесенные в предыдущую версию.

0 голосов
/ 15 июня 2011

Добавьте предварительно загруженную базу данных в ваш проект (в папку «Ресурсы»).Он будет развернут вместе с вашим приложением и может быть найден во время выполнения в главном пути пакета.

Поскольку пользователь никогда не будет записывать в него контент, а только будет читать из него, вы сможете открыть его прямо изтам.Вы можете получить путь к нему, используя:

NSString *databasePath = [[NSBundle mainBundle] pathForResource:@"ReadOnlyDatabase" ofType:@"sqlite"];
0 голосов
/ 15 июня 2011

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

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