разница между функциями window.openDatabase() и window.sqlitePlugin.openDatabase()?

Использование Cordova версии 3.x и Android версии 2.x–4.x.

Мне интересно:

  1. Правильно ли я понимаю, что все устройства Android по умолчанию имеют программу/интерфейс sqlite для создания базы данных sqlite?
  2. Оба вышеперечисленных вызова функций базы данных создают базу данных sqlite на устройстве?
  3. Если приведенный выше ответ нет, то какой тип базы данных создают оба вышеуказанных вызова функций?
  4. Если ответ да, то является ли window.sqlite.openDatabase() функцией-оболочкой вокруг window.openDatabase()?
  5. Являются ли базы данных, созданные вызовом, постоянными? То есть доступны ли данные после закрытия и повторного открытия упакованных приложений Cordova?
  6. Существует ли максимальный размер базы данных, которую можно создать двумя вышеуказанными методами?

person frank    schedule 27.06.2014    source источник


Ответы (1)


  1. WebSQL (window.openDatabase) является устаревшим веб-стандартом. Но он доступен в большинстве десктопных и мобильных браузеров. Большинство браузеров реализуют спецификацию с помощью SQLite. В Android браузеры и WebViews поддерживают WebSQL, наряду с локальным хранилищем и хранилищем сеансов из первых версий, а также IndexedDB, начиная с KitKat.

Затем мы видим, что Android независимо поддерживает SQLite для использования из API Java в качестве одного из основных механизмов сохранения.

Кордова особенная. Приложение запускается в WebView, поэтому оно должно использовать WebSQL, но в Android плагин переопределяет API и внедряет в объект окна новые функции, которые по умолчанию могут использоваться в другой реализации, а не в API браузера.

Таким образом, в приложении Cordova после загрузки, когда вы вызываете openDatabase, вы фактически вызываете новую функцию, которую Cordova поместила в объект Windows, перекрывая старую стандартную функцию. Из документов Cordova:

Некоторые устройства уже поддерживают эту спецификацию. Для этих устройств используется встроенная поддержка вместо замены реализацией Cordova. Для устройств, не поддерживающих хранение, реализация Cordova должна быть совместима со спецификацией W3C.

Эта цитата неоднозначна, и ее больше нет в документах. Под «встроенным» они подразумевали встроенную поддержку WebSQL в WebView. Документы, которые я связал, старые, из версии 2.x. В этих версиях Cordova по умолчанию использовала пользовательскую реализацию только в том случае, если WebView не поддерживал WebSQL (я думаю, этого никогда не было) или если на устройство влиял ошибка 16175. Реализация по умолчанию состояла в использовании плагина Storage.java, который использовал Java API для создания базы данных SQLite. Я читал последние источники и более новые (3 .x), кажется, они всегда используют WebSQLite.

  1. Да, оба создают файл БД, но путь к нему будет другим. Фактически вы можете открыть одну и ту же БД из кода JavaScript и кода Java в своем приложении.

  2. Тот же тип БД. SQLite — это собственный слой C, который управляет файловой структурой. Фактически, вы также можете использовать этот собственный C API из собственного приложения для Android.

  3. Cordova/Phonegap используют SQLIte из встроенной поддержки, если она доступна (в Android она есть).

  4. Да, они остаются там.

  5. Да, есть предел. Проверьте здесь для получения дополнительной информации.

person Mister Smith    schedule 27.06.2014