PhoneGap 使用啥数据库,大小限制是多少?
Posted
技术标签:
【中文标题】PhoneGap 使用啥数据库,大小限制是多少?【英文标题】:What database does PhoneGap use and what is the size limit?PhoneGap 使用什么数据库,大小限制是多少? 【发布时间】:2013-03-29 16:24:09 【问题描述】:我编写了一个 html5 数据库,它抽象了 localStorage、indexedDB 和 WebSQL。直接使用 HTML5,我的数据库选项如下所示:
IE10 - 索引数据库 - 最大 1GB FireFox - indexedDB - 无限制 Safari - WebSQL - 最大 50MB Chrome - IndexedDB(或 Web SQL) - 无限制(使用 HTML5 Quota API ref1, ref2) Opera - WebSQL(直到他们切换到 webkit?) - 无限制我想使用 PhoneGap 或 Quota API 扩展最大数据库大小。从 PhoneGap 的文档看来,当前的 PhoneGap database ecosphere 是:
WebSQL - android、Blackberry、iPhone 和 webOS localStorage - Windows Phone 7 indexedDB - Windows Phone 8,我猜,到处都有 indexedDB,但 WebSQL 不可用。还有PhoneGap SqlLite 插件。 ios、Android、Windows Phone 8+
问题 1 - 我对 PhoneGap 将使用什么数据库的理解准确吗?
问题 2 - 是否有可靠的文档说明给定类型的 PhoneGap 数据库将存储多少数据? *如果是 PhoneGap 数据库而不是浏览器数据库实现。
问题 3 - PhoneGap 是否有计划坚持 Web Storage standards 从而放弃 WebSQL 以支持 indexedDB?如果是这样,一旦切换到 indexedDB,我是否仍然可以使用现有的 WebSQL 代码(通过内置的 PhoneGap-polyfill)?
问题 4 - 在数据库大小有限且无法通过 PhoneGap 或配额 API 扩展但可以访问文件系统的情况下,假设“额外”是否合理?数据可以存储在设备的文件系统或 SD 卡上吗?
【问题讨论】:
你的html5数据库抽象是开源的吗?链接? 我希望是因为我认为我在这方面做得很好并且想炫耀它,但事实并非如此。它很难维护,因为随着浏览器越来越接近实现标准,代码中断或某些浏览器需要使用不同的功能序列。除非您有人可以照看它,否则我不建议您尝试构建它。 【参考方案1】:我对 PhoneGap 将使用什么数据库的理解准确吗?
是的。 PhoneGap 可以使用 LocalStorage、SessionStorage 或 SQLite 数据库。您也可以选择使用 PhoneGap 通过插件连接到设备的原生类,并传递原生类数据,然后它将存储在设备上。
是否有可靠的文档说明给定类型的 PhoneGap 数据库将存储多少数据?如果它是 PhoneGap 数据库而不是浏览器数据库实现。
-
本地存储 :: 10MB
会话存储 :: 10MB
SQLite 数据库 :: 50MB-80MB(取决于设备)
使用插件调用的本地数据库 :: 无限数据量
索引数据库 :: 5MB。依然存在。但是非常有问题,theres a list of devices/OS's that run it here
PhoneGap 是否有计划遵守 Web 存储标准从而放弃 WebSQL 以支持 indexedDB?如果是这样,一旦切换到 indexedDB,我是否仍然可以使用现有的 WebSQL 代码(通过内置的 PhoneGap-polyfill)?
WebSQL 正在慢慢被弃用。它的替代品是 IndexedDB 或 SQLite。然而,对您来说最好的选择是 SQLite 或本机数据库(例如 iOS 上的 Core Data)
在数据库大小有限且无法通过 PhoneGap 或 Quota API 扩展但可以访问文件系统的情况下,假设“额外”数据可以存储在设备的文件系统上是否合理?在 SD 卡上?
这绝对是可能的。
在 Android 上,您可以指定数据库的位置,从而将数据推送到外部数据库。 在 iOS 上,您可以使用本机数据库调用将数据存储在 CoreData 上,没有外部存储器。 在所有操作系统的所有情况下,您都可以创建一个平面数据库文件(如文本文件),将数据存储在键值列表中,然后在首次运行时将它们拉入您的应用程序。在这种情况下,请注意内存管理。我在my answer 中添加了关于如何为 SQLite 和 LocalStorage 数据库进行编码的说明。
【讨论】:
出色的答案,谢谢。 IndexedDB 真的被弃用了吗?我一直讨厌 IndexedDB(甚至就此联系 W3C)。 是的,我也讨厌 IndexedDB。但我真的觉得 SQLite 可能是您的最佳选择。通过一些额外的编码,您可以在将数据写入数据库之前添加基本的加密/解密。 我想你不会考虑给我赏金吧? 充满希望却又可爱的笑容 sry,我以为它是自动完成的 谢谢。我在这里添加了如何在 SQLite 和 LocalStorage 中开始 :: ***.com/questions/12005042/phonegap-offline-database/…【参考方案2】:我能够在 Android 4.0.4 平板电脑上运行测试。它使用 WebSQL(甚至不支持 db.changeVersion 的旧版本的 WebSQL),它允许我填满整个硬盘驱动器(我的数据库为 12GB)。我不知道其他设备或 SD 卡的工作原理。
【讨论】:
你是怎么做到的?您是否在配额限制上指定了一些参数?【参考方案3】:索引数据库 -
它与许多类型的移动操作系统和版本不兼容 它仅与非常特定版本的移动操作系统兼容 开发人员不能将 SQL 与 IndexedDB 一起使用。 SQL 语句可以在 SQLite 和 WebSQL 上使用 大多数开发人员都尽量避免使用 IndexedDBWebSQL -
它已被 W3C 弃用,这意味着它不再被维护或开发 它需要另一个名为 Polyfill 的插件,以使移动应用程序能够与流行的移动操作系统(例如 Google Android 和 Apple iOS)一起使用SQLite -
它获得了 Google 颁发的奖项 SQLite 有其官方网站。 IndexedDB 和 WebSQL 没有 在 Google 上,SQLite 返回 180 万条结果。 WebSQL 返回的结果略少于 700K,IndexedDB 返回的结果为 282K。 开发人员可以在 SQLite 中使用常见的 SQL 语句。如果你想要一个关于 SQLite 的快速教程
Storage of SQLite database using Android and Phonegap
【讨论】:
以上是关于PhoneGap 使用啥数据库,大小限制是多少?的主要内容,如果未能解决你的问题,请参考以下文章
Android 上带有 Phonegap 的缓存清单的大小限制