PhoneGap - Чтение предварительно упакованной базы данных sqlite

Я слишком долго пытался заставить это работать. Я только начал входить в PhoneGap/Cordova. Я запустил демонстрационное приложение, установил все официальные плагины и добавил этот плагин SQLite для начала работы: https://github.com/brodysoft/Cordova-SQLitePlugin

Однако я хочу, чтобы плагин читал предварительно упакованную базу данных. Проще говоря, создайте приложение, которое работает в автономном режиме и не требует загрузки базы данных SQLite при первом запуске.

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

Поэтому я провел небольшое исследование и понял, что с PhoneGap ДОЛЖНО быть то же самое. Поместите где-нибудь двоичную базу данных SQLite, чтобы при сборке она была упакована вместе с приложением. А затем просто загрузите его с помощью подключаемого модуля SQLite, на который я ссылался здесь.

Наконец, вопрос! Какие точные шаги я должен предпринять, чтобы иметь возможность прочитать файл, который был упакован с приложением?

  1. Куда я должен поместить свой двоичный файл, чтобы убедиться, что он упакован в приложение?
  2. Как именно я должен инициализировать File API? Должен ли я запрашивать постоянное хранилище с помощью window.requestFileSystem? Или я должен получить какой-то (не знаю какой) каталог (cordova.file.applicationDirectory) как DirectoryEntry, используя window.resolveLocalFileSystemURL? Если да, то какие ТОЧНЫЕ параметры я должен использовать? В основном я имею в виду это: https://github.com/apache/cordova-plugin-file/blob/master/doc/index.md
  3. Как прочитать упакованный файл? Использование window.resolveLocalFileSystemURL с правильной папкой? Какие тогда должны быть параметры?
  4. Копирование файлов должно работать нормально, если я дойду до этого момента. Просто скопируйте из cordova.file.applicationDirectory только для чтения в cordova.file.dataDirectory, который доступен для чтения/записи. Верно?

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

Просто работать с базой данных WebSQL и загружать данные в БД, используя загрузку INSERTs, нецелесообразно, база данных содержит тысячи записей.

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


person Michal Ferko    schedule 20.01.2015    source источник


Ответы (1)


В настоящее время стандартный плагин Cordova для SQLite поддерживает предварительно заполненные базы данных, которые скопируйте файл базы данных из www и поместите его в нужный каталог. Он также поддерживает Android и iOS, поэтому вам не нужно иметь разную логику для разных платформ.

Когда вы открываете базу данных, вы можете указать, что она предварительно заполнена, используя createFromLocation: 1 следующим образом:

var db = window.sqlitePlugin.openDatabase({
    name: "my.db",
    createFromLocation: 1
});

Для iOS он сначала проверит www и, если файл существует, скопирует его в Documents. Имейте в виду, что его резервная копия будет сохранена в iCloud. Если вы хотите исключить его из iCloud, добавьте также location: 2 к openDatabase, что поместит ваши базы данных в Library/LocalDatabase.

ОБНОВЛЕНИЕ (2016 г.)

Оригинальный проект Cordova-sqlite-storage больше не поддерживает предварительно заполненную базу данных.

Однако эта функция только что переместилась в другой проект от того же создателя. Теперь используйте для этой цели Cordova-sqlite-ext.

person Qorbani    schedule 23.05.2015
comment
По состоянию на 2017 год Cordova-sqlite-storage все еще не поддерживает предварительно заполненную базу данных? Также вы знаете, куда поместить файл в приложении Ionic2? - person Thanh Trung; 02.01.2017