Развертывание базы данных sqlite при обновлении приложения для iPhone

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

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

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


person 4thSpace    schedule 16.02.2009    source источник
comment
Вы хотите сказать, что устанавливаете MySQL на iPhone? Я серьезно сомневаюсь, что это сработает. Или вы говорите, что iPhone где-то запрашивает базу данных MySQL на сервере?   -  person Paul Tomblin    schedule 16.02.2009
comment
Да, mysql есть на iPhone, что является обычным сценарием. Если быть точным, вопрос к разработчикам iPhone.   -  person 4thSpace    schedule 16.02.2009
comment
SQLite - распространенный сценарий на iPhone (он встроен). Использование MySQL - это безумие.   -  person Paul Tomblin    schedule 16.02.2009
comment
Ты прав. Прости. Имел ввиду sqlite. Я обновил вопрос.   -  person 4thSpace    schedule 16.02.2009


Ответы (2)


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

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

ATTACH 'filepath' AS config;

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

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

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

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

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

person Steven Fisher    schedule 28.02.2009

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

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

Я оставлю №2 человеку, разбирающемуся в sqlite, но вы можете использовать тег «sqlite» вместо тега «mysql», если это то, что вы на самом деле делаете.

person cdespinosa    schedule 17.02.2009
comment
Ага - обновил тег. Я не думаю, что выбор работает, поскольку пользователь также накопил данные к тому времени, когда он / она будет готов к обновлению. Если я выберу вариант b, откуда будет скопирована база данных, если не пакет? Также я не могу заменить пользовательские данные. Только конфигурационные (не пользовательские) данные. Спасибо. - person 4thSpace; 18.02.2009