Развертывание sqlite DB при обновлении приложения для iPhone - PullRequest
9 голосов
/ 16 февраля 2009

Я использую sqlite в качестве источника данных в приложении для iPhone. У меня есть два вопроса относительно обновлений приложения.

1.) Все данные являются конфигурационными / нетранзакционными. Смысл, это только для чтения. Когда я обновлю / добавлю данные конфигурации, я выпущу обновление для приложения. Когда пользователь получает обновленное приложение для iPhone, удаляется ли оригинал? Если это так, я в порядке, потому что будут развернуты новые данные конфигурации базы данных. Если это не так, как заменить данные?

2.) Данные являются конфигурационными и транзакционными. Это означает, что пользователь может сохранить данные в БД. Когда пользователь обновляется до новой версии приложения, я хочу сохранить свои существующие данные, но заменить все данные конфигурации. Я предполагаю, что для этого мне понадобятся скрипты INSERT и UPDATE, хранящиеся в приложении. Какой эффективный способ это сделать?

Ответы [ 2 ]

11 голосов
/ 28 февраля 2009

cdespinosa хорошо описал сценарий № 1, поэтому я займусь № 2.

Я еще не делал этого на iPhone, но в настольной среде самый простой способ справиться с этим - хранить данные конфигурации в отдельной базе данных. Вы можете легко подключиться к нескольким базам данных. Начните с открытия вашей основной базы данных, которая, вероятно, должна быть базой данных, которая может измениться. Затем sqlite3_exec оператор ATTACH, который выглядит следующим образом:

ATTACH 'filepath' AS config;

С этого момента вы можете делать что-то вроде этого:

SELECT * FROM UserTableName;
SELECT * FROM config.ConfigurationTableName;

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

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

Я надеюсь, что кто-то еще может предоставить вам более подробную информацию. :)

5 голосов
/ 17 февраля 2009

Когда пользователь обновляет приложение, старый пакет приложений удаляется, а новый пакет приложений устанавливается, но пользовательские данные, связанные с пакетом приложений, не затрагиваются.

Таким образом, вы можете: а) оставить ваши данные в комплекте приложений (они будут заменены автоматически) или б) в одностороннем порядке скопировать их в область пользовательских данных при первом запуске (поэтому вы намеренно замените их при обновлении) .

Я оставлю # 2 человеку, знающему sqlite, но вы можете использовать тег "sqlite" вместо тега "mysql", если это то, что вы на самом деле делаете.

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