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

fra*_*ank 9 sqlite android web-sql phonegap-plugins cordova

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

我想知道:

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

Mis*_*ith 9

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

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

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

所以在Cordova应用程序中,一旦加载,当你打电话给openDatabase你时,实际上是在调用一个新功能,Cordova已经放置在windows对象中,覆盖了旧标准.来自Cordova文档:

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

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

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

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

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

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

  5. 是的,有一个限制.点击此处了解更多信息.