SQLite可以在iPhone上存储多少钱?

时间:2009-11-18 00:25:11

标签: iphone sqlite safari

我对iPhone的网络应用有一个想法,但我不知道移动Safari的SQLite数据库中可以存储多少数据。我尝试搜索Apple文档,但一无所获:

Safari Client-Side Storage and Offline Applications Programming Guide: Using the JavaScript Database

12 个答案:

答案 0 :(得分:11)

大多数答案都是完全错误的。 Safari不允许您创建超过50MB的SQLite数据库(或扩展超过该大小的现有数据库)。

这是Safari强加的限制 - 正如其他人所说,SQLite本身支持更大的数据库,您可以从本机应用程序中使用它们。但是webapps限制在50MB。

注意这是每个数据库可能是有用的 - 如果你真的需要额外的空间,你可以创建多个数据库,虽然这显然会造成很多麻烦。

答案 1 :(得分:2)

正如其他海报所说的那样。您只受设备上的驱动器空间限制。

您还需要考虑内存占用情况。 iphone上有一定数量的内存,一般情况下它很小,所以你在内存中可以拥有的数据/水合物的数量是你的应用程序的另一个潜在限制。

答案 2 :(得分:2)

有很多人回答,显然从未测试过。我在iOS(4.3.3)的最新版本上,已经建立了一个系统来创建多个数据库,并将它们保持在45 MB以下,但发现50 MB的上限是针对整个网站的。因此,无论您将数据分成多少,它仍然会将其限制为50 MB的聚合上限。

答案 3 :(得分:1)

safari mobile的数据库大小限制,每个站点50 MB,而不是每个数据库。我测试了这个。即使你有一个额外的空数据库,如果单个站点上所有数据库的总大小为50 mb,也无法添加它。

值得注意的是,在websql上将字符保存为双字节,即磁盘上的2百万个字符将是4兆字节而不是2兆字节。

答案 4 :(得分:0)

您仅受设备上可用空间量的限制。

答案 5 :(得分:0)

我不确定。如果您正在使用自己的应用程序,则会受到设备上可用空间的限制,并且在某种程度上会受到内存占用的限制(正如Bryan McLemore指出的那样)。

但是,由于您正在寻找在Safari中使用JavaScript,因此没有简单的方法可以告诉您。根据该文件,您发现它看起来可能受到网站的限制,但没有什么能告诉您多少。我建议写一个快速的脚本来填充数据库,并弄清楚它实际上是多少。在那之后,我可能会将这个值减半,并假设我总是可以使用那么多。

请务必报告,以便我们都知道!

答案 6 :(得分:0)

这很可能是32太字节...这远远超过了可用的磁盘空间。

我通过将最大页面大小乘以SQLite limits page底部列出的最大页数来达到此数字。

答案 7 :(得分:0)

SQLite中的限制

本文中的“限制”是指不能超过的尺寸或数量。我们关心的是BLOB中的最大字节数或表中的最大列数。

SQLite最初设计的策略是避免任意限制。当然,在具有有限内存和磁盘空间的机器上运行的每个程序都有某种限制。但是在SQLite中,这些限制没有明确定义。策略是如果它适合内存并且你可以用32位整数来计算它,那么它应该工作。

不幸的是,无限制政策已被证明会产生问题。因为上限没有很好地定义,所以它们没有经过测试,并且在将SQLite推向极端时经常会发现错误(包括可能的安全漏洞)。出于这个原因,较新版本的SQLite具有明确定义的限制,并且这些限制作为测试套件的一部分进行测试。 从版本3.6.19开始(报告中的所有统计信息都与SQLite版本相对),SQLite库包含大约65.7个KSLOC的C代码。 (KSLOC意味着成千上万的“源代码行”,换句话说,代码行不包括空白行和注释。)相比之下,该项目的测试代码和测试脚本是690倍--45409.7 KSLOC。

答案 8 :(得分:0)

iPhone上的默认存储限制似乎是5mb

答案 9 :(得分:0)

davibe已经做了一些工作,用他的PhoneGap插件将限制提高到1GB。 https://github.com/davibe/Phonegap-SQLitePlugin

该插件调用本机sqlite3 API,在Javascript端使用包装器 从sqlite.js中提取的相关代码是:

update origins set quota = '999999999999' where origin = 'file__0';   
"update databases set estimatedSize = '999999999999' where name = '" + dbName + "';'";

答案 10 :(得分:0)

警告:我的iphone越狱了!但我并不怀疑这会改变任何事情。



50MB的限制不再正确。



在带有iOS 6.1的iPhone 4S上,我的webclip有一个58.66 MB(448496条记录)的数据库(网站固定在跳板上)。

没有特殊的技巧,只是标准的HTML5用法。

答案 11 :(得分:0)

最大数据库大小

请参阅Official Sqlite site

每个数据库都包含一个或多个“页面”。在单个数据库中,每个页面的大小相同,但不同的数据库的页面大小可以是512到65536之间的两个页面大小。数据库文件的最大大小为2147483646页。在最大页面大小为65536字节时,这意味着最大数据库大小约为1.4e + 14字节(140太字节,或128 tebibytes,或140,000千兆字节或128,000 gibibytes)。

此特定上限未经测试,因为开发人员无法访问能够达到此限制的硬件。但是,当数据库达到基础文件系统的最大文件大小(通常远小于最大理论数据库大小)并且数据库由于磁盘空间耗尽而无法增长时,测试会验证SQLite是否正确且正确地运行。