2010-04-22 3 views
3

В настоящее время у меня есть приложение для iPhone, которое считывает данные из внешнего XML-файла при запуске, а затем записывает эти данные в базу данных (оно только считывает/записывает данные, которые приложение пользователя не видел до этого, хотя)Как программно заполнить базу данных

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

Наше предлагаемое решение состоит в том, чтобы включить эти данные «предварительно построенные» в базу данных приложений, чтобы им не приходилось загружать архивные данные при первой загрузке - это уже в приложении, когда они его покупают ,

Мой вопрос заключается в том, есть ли способ автоматически заполнять эти данные данными, скажем, с помощью XML-файла или чего-то еще. База данных находится в SQLite. Я бы заполнил его вручную, но, очевидно, это займет очень много времени, поэтому мне просто интересно, есть ли у кого-нибудь еще ... программное решение ...

+3

Просто используйте то, что вы использовали бы для создания базы данных в приложении, чтобы визуализировать исходные данные xml в приложении. Затем возьмите только что созданный файл данных и добавьте его в свой проект в качестве ресурса. Когда приложение запустится, проверьте, находится ли файл данных в каталоге данных, если нет, скопируйте файл primer-db из пакета ресурсов в каталог данных и продолжите. –

+0

Я одобрил ваш комментарий Джейсон, но на самом деле вы должны положить это как ответ! –

+0

Привет, Джейсон. Я думаю, что понимаю, что вы говорите мне: 1. Напишите приложение «dummy» для загрузки данных в базу данных. 2. Загрузите приложение «dummy» в соответствующее приложение как ресурс 3. Если база данных не существует в каталоге данных, скопируйте из комплекта ресурсов (из «фиктивного» приложения, внутри собственного приложения?) в каталог данных 4. Теперь мы должны хорошо идти ... Единственное, что я действительно не знаю, как получить что-то из одного приложения в другое? Например, где находится каталог данных для симулятора? Я смущен о том, как на самом деле * делать * все, что вы упомянули, это все * стыд * –

ответ

1

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

Он не говорит о фиктивном приложении - напишите приложение, как обычно, но проверьте, существует ли база данных в вашем основном пакете, прежде чем вы вызываете код, который заполняет plist. Вы запускаете это в симуляторе, вытаскиваете созданную базу данных sqllite и добавляете ее в свой проект - если вам нужно только прочитать ее, вы можете прочитать ее из каталога основных пакетов. Если вам нужно сделать дальнейшие записи, скопируйте их в область доступных для записи документов и используйте их оттуда. Так что в основном для основного пользователя, код для заполнения БД никогда не будет вызван ...

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

1

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

Приятно, что вы можете получить доступ к файловой системе симулятора прямо на вашем Mac. Я нахожусь в стороне от себя в данный момент, или я могу сказать вам, где искать, но я просто нахожу его, помещая имя файла db в прожектор и просто работая с этим.

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

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

0

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

У вас есть другой способ, вместо INSERT INTO, заполнить sqlite db. Вы можете создать файл CSV для каждой таблицы и загружать в таблицы с помощью компьютера и SQLite оболочки:

всего 2 простых команд:

.separator SEPARATOR 
.import FILE TABLE 

Пример:

adslol:~ user$ sqlite3 
SQLite version 3.6.12 
Enter ".help" for instructions 
Enter SQL statements terminated with a ";" 
sqlite> .separator ; 
sqlite> .import myData.csv nameOfMyTable 
sqlite> .quit 

Я надеюсь, что это что вы искали :)

Если вам нужен хороший клиент для sqlite3, попробуйте SQLite Manager, это дополнения к Firefox.

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