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

时间:2014-06-27 10:28:55

标签: android sqlite cordova phonegap-plugins web-sql

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

我想知道:

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

1 个答案:

答案 0 :(得分:9)

  1. WebSQLwindow.openDatabase)是不推荐使用的网络标准。但它在大多数桌面和移动浏览器中都可用。大多数浏览器使用SQLite实现规范。在Android中,浏览器和WebViews支持WebSQL,以及第一版本的本地存储和会话存储,以及自KitKat以来的IndexedDB。
  2. 然后我们知道Android独立支持从Java API使用SQLite作为其主要持久性机制之一。

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

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

      

    某些设备已提供此规范的实现。对于这些设备,使用内置支持而不是用Cordova的实现替换它。对于没有存储支持的设备,Cordova的实现应该与W3C规范兼容。

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

    1. 是的,都创建了一个DB文件,但它的路径会有所不同。实际上,您可以从应用程序中的JavaScript代码和Java代码中打开相同的数据库。

    2. 相同类型的数据库。 SQLite是一个管理文件结构的本机C层。实际上,您也可以使用本机Android应用程序中的本机C API。

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

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

    5. 是的,有限制。查看here了解详情。