2009-11-28 3 views
2

Я пытаюсь подтолкнуть обновленную версию моего SQL-сервера к моему устройству и до сих пор не выяснил способ сделать это, кроме как переименовать его каждый раз (болезненно). Зарезервированная (кэшированная?) Копия остается на устройстве постоянно.Обновить базу данных на iPhone

Я понимаю, как получить обновленную версию в симуляторе, очистив папку/applications, но это, похоже, не влияет на физическое устройство.

Предложения?

ответ

1

Если файл базы данных является частью вашего пакета приложений при обновлении приложения, вы обновите базу данных.

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

я включить таблицу schema_version свою базу данных:

create table schema_version (
    version integer not null 
); 

, а затем на приложение запускается, проверить текущую версию, а затем посмотреть в моем каталоге приложения для обновления-схе- [N + 1]. sql-файл для применения в качестве обновления. Так что, если моя версия схемы - 4, я проверю на update-schema-5.sql и т. Д. (И я повторяю это по мере необходимости, пока не закончу файлы с обновлением-схемой-N.sql для применения.)

Имейте в виду, что производительность записи sqlite на iphone не так уж и велика. Если вам нужно обновить строки базы данных 200K, вам, скорее всего, придется выяснить, каким образом пользователь будет забавляться во время его продолжения.

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

+0

Отлично! Когда вы хотите нажать новую версию db на локальное физическое тестовое устройство (iphone/ipod touch), какой самый простой подход? Я только что переименовал свой db каждый раз, что заставляет новую версию подбираться/использоваться. – 2009-12-03 01:46:56

+0

I Build: Clean ([shift-command-k]) после обновления базы данных. –

0

Вы можете написать приложение командной строки OS X для «diff» старого и нового db. Затем отправьте устройству объект JSON (или XML) всех добавлений, удалений и обновлений и примените их к существующему хранилищу.

Вы также можете скопировать хранилище в папку «Документы» при первом запуске приложения и прочитать его оттуда. Папка «Документы» имеет доступ для чтения/записи/удаления, поэтому я думаю, что вы можете просто добавить новый. Вы можете получить такой путь.

NSArray *arrayPaths = NSSearchPathForDirectoriesInDomains(
      NSDocumentDirectory, 
      NSUserDomainMask, 
      YES); 

NSString *docDir = [arrayPaths objectAtIndex:0]; 
+0

Я полагаю, что это может сработать, но звучит как больше работы, чем просто переименование. :) Как вы справляетесь с ситуацией, когда вы выпускаете новый rev вашего приложения в хранилище приложений, и вам нужно внести изменения в схему? – 2009-12-01 01:43:31

+0

Я не думаю, что это сработает, если вам придется изменить схему. Это еще не придумало для меня. Я думаю, что вы можете записать хранилище в папку документов, которая находится за пределами пакета и имеет доступ для чтения/записи. –

Смежные вопросы