android - window.openDatabase() 和 window.sqlitePlugin.openDatabase() 函数之间的区别?

标签 android sqlite cordova phonegap-plugins web-sql

使用 Cordova 版本 3.x 和 Android 版本 2.x 到 4.x。

我在想:

  1. 我的理解是否正确,即默认情况下所有 Android 设备都有一个用于创建 sqlite 数据库的 sqlite 程序/接口(interface)?
  2. 上述两个数据库函数调用是否在设备中创建了一个 sqlite 数据库?
  3. 如果以上答案是,那么上述两个函数调用创建的是什么类型的数据库?
  4. 如果答案是,那么 window.sqlite.openDatabase()window.openDatabase() 函数包装器吗?<
  5. 调用创建的数据库是否持久?即关闭再打开cordova打包的应用后数据是否可用?
  6. 以上两种方法创建的数据库大小是否有最大限制?

最佳答案

  1. WebSQL (window.openDatabase) 是一个已弃用的网络标准。但它在大多数桌面和移动浏览器中都可用。大多数浏览器使用 SQLite 实现规范。在 Android 中,浏览器和 WebViews 支持 WebSQL,以及第一个版本的本地存储和 session 存储,以及自 KitKat 以来的 IndexedDB。

然后我们有 Android 独立支持从 Java API 使用 SQLite 作为其主要持久性机制之一。

Cordova 很特别。该应用程序在 WebView 中运行,因此它应该使用 WebSQL,但在 Android 中,插件会覆盖 API 并将新功能植入到窗口对象中,这些功能可能默认为不同的实现,而不是浏览器 API。

因此,在 Cordova 应用程序中,一旦它被加载,当您调用 openDatabase 时,您实际上是在调用 Cordova 放置在 windows 对象中的新函数来覆盖旧的标准函数。来自Cordova docs :

Some devices already provide an implementation of this spec. For those devices, the built-in support is used instead of replacing it with Cordova's implementation. For devices that don't have storage support, Cordova's implementation should be compatible with the W3C specification.

该引用含糊不清,不再出现在文档中。对于“内置”,它们意味着 WebView 中的内置 WebSQL 支持。我链接的文档是旧的,来自 2.x 版本。在那些版本中,如果 WebView 不支持 WebSQL(我认为这从未发生过)或者设备受到 bug 16175 的影响,Cordova 仅默认使用自定义实现。 .默认实现包括使用 Storage.java 插件,该插件使用 Java API 创建 SQLite 数据库。我一直在阅读 most recent sources在较新的 (3.x) 版本上,他们似乎总是使用 WebSQLite。

  1. 是的,两者都创建了一个数据库文件,但它的路径不同。事实上,您可以从应用中的 JavaScript 代码和 Java 代码打开同一个数据库。

  2. 相同类型的数据库。 SQLite 是管理文件结构的 native C 层。事实上,您也可以在原生 Android 应用程序中使用这个原生 C API。

  3. Cordova/Phonegap 使用来自内置支持的 SQLIte(如果可用)(在 Android 中是)。

  4. 是的,他们留在那里。

  5. 是的,有一个限制。检查here了解更多信息。

关于android - window.openDatabase() 和 window.sqlitePlugin.openDatabase() 函数之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24449640/

相关文章:

java - 如何将git项目制作为Android项目?

javascript - 是否可以在 Ionic2/Angular2 应用程序中使用 HTTPS/SSL?

cordova - jPlayer 和 PhoneGap 构建兼容性

c# - 将 DataGrid 列按日期排序

ios - PhoneGap iOS 构建奇怪的行为

android - 具有相同 ID 的 subview 的自定义 View

android - 如何在gridview中动态移动滚动条

android - 我如何使用 Parse、Phonegap 和 phonegap-parse-plugin 接收通知?

sqlite - TEXT 列上 WHERE 子句的奇怪 sqlite3 行为

android - Android 上的 SQLite : Union with limits alternative