Ответ 1
-
Только файлы внутри пакета приложений заменяются. Если файл базы данных находится в вашем каталоге Документов приложения, он не будет заменен. (Обратите внимание: если вы измените файлы внутри своего пакета приложений, подпись кода перестанет быть действительной, и приложение не будет запущено. Поэтому, если вы не используете базу данных только для чтения, это должно быть в каталоге "Документы".)
-
Да.
-
Что лучше всего зависит от данных. Вы не найдете образец кода для такого общего вопроса. Во-первых, вам нужно обнаружить, что ваше приложение работает со старой версией DB. Затем вам нужно обновить его.
Чтобы проверить версии:
- Вы можете использовать другое имя файла для новой схемы. Если Version2.db не существует, но Version1.db делает, выполните обновление.
- Вы можете внедрить версию схемы в свою базу данных. У меня есть таблица под названием
metadata
с столбцомname
иvalue
. Я использую это для хранения некоторых общих значений, включая номерdataversion
. Я проверяю этот номер при открытии базы данных, и если она меньше текущей версии, я выполняю обновление. - Вместо того, чтобы создавать таблицу, вы также можете использовать встроенную user_version pragma для проверки и сохранения номера версии.
- Вы можете напрямую проверить структуру таблицы: искать наличие столбца или таблицы.
Для обновления:
- Вы можете обновить систему, используя серию команд SQL. Вы даже можете хранить файл SQL внутри своего пакета приложений в качестве ресурса и просто передать его в
sqlite3_exec
для выполнения всей работы. (Делайте это внутри транзакции, если есть проблема!) - Вы можете обновить, скопировав данные из одного файла базы данных в новый.
Если ваше обновление может длиться долго (более одной секунды), вы должны отобразить экран обновления, чтобы объяснить пользователю, что происходит.