我正在编写一个我想在iOS应用商店中发布的HTML5应用程序.使用PhoneGap或包装在UIWebView控件中.
我在为应用程序存储数据方面有什么选择,我有点困惑.
是否使用适合在此类应用程序中存储应用程序数据的localStorage,WebSQL或IndexedDB技术?我将存储JSON和XML数据.
请记住,如果用户无意中删除了这些数据,那么他们将失去工作,这显然是我不想发生的.
我知道减轻这种风险的唯一真正方法是将数据同步到"云"或其他在线系统 - 我可以在将来的版本中执行此操作,但现在不能.最初我只想在本地存储数据,如果这是一种合理稳定的做事方式.
根据我的理解,当清除cookie时,浏览器也将清除任何localStorage数据.因此,我可以看到用户意外地执行此操作的规则.
WebSQL看起来很不错 - 用户无法在iOS上无意中删除它.他们实际上必须进入浏览器设置并手动删除数据库.
但是WebSQL的缺点在于,未来我可能不会支持它.
使用IndexedDB,我不清楚何时清除该数据.删除cookie时是否也会删除它,或者Safari设置中的"数据库"选项是否会控制它?
IndexedDB是更好的解决方案,因为它将来会比WebSQL提供更好的支持吗?
还有其他更合适的解决方案我不知道吗?
这个项目的要求很奇怪,但我希望得到一些见解......
我有一个包含大约12,000行数据的CSV文件,大约12-15列.我正在将其转换为JSON数组并通过JSONP加载它(必须运行客户端).在数据集上进行任何类型的查询都需要几秒钟才能返回较小的过滤数据集.我目前正在使用JLINQ进行过滤,但我实际上只是循环遍历数组并根据条件返回一个较小的集合.
webdb或indexeddb是否允许我以更快的速度进行此过滤?你知道的那些教程/文章解决了这个特殊类型的问题吗?
我工作的一个JavaScript代码与客户端SQLite数据库进行交互的,通过新望window.openDatabase(...),database.transaction(...)和相关的API.正如大多数人所知,当你以这种方式执行查询时,它是一个异步调用,这通常很好.您可以根据回调进行调用并处理结果.
在我目前的情况下,我正在为一个客户端工作,该客户端在本地存储的数据库中执行某些层次结构.我遇到麻烦的算法部分需要从某一行开始,该行有一个"父"(由id)引用,这是表中的另一行.我必须继续走这棵树直到我到达根部.
问题是,我不知道如何使用带回调的异步样式查询来继续提供循环父ID.理想情况下,我可以阻止查询,以便我可以在循环中完成所有操作.这是我当前设置的关键部分:
for (i in search.searchResults.resultsArray)
{
hierarchyArr = new Array();
pageHierarchyArr = new Array();
id = search.searchResults.resultsArray[i].ID;
while (id != null && id != "")
{
var hierarchySql = "SELECT ID, parentID, type, content FROM content WHERE ID = " + id;
// This is a prettied up call to database.transaction(...)
var rs = db.getRS(hierarchySql);
// Ideally the code below doesn't execute until rs is populated
hierarchyArr.push(rs[0]);
if (rs[0].type == "page")
{
pageHierarchyArr.push(rs[0]);
// …Run Code Online (Sandbox Code Playgroud) 我一直在使用phonegap很少的时间,而且我在使用存储概念方面遇到了一些麻烦.
因此,文档说明您可以打开这个数据库,它是一个SQLite实现."window.openDatabase返回一个新的Database对象.
此方法将创建一个新的SQL Lite数据库并返回一个Database对象.使用数据库对象来操作数据." http://docs.phonegap.com/en/2.2.0/cordova_storage_storage.md.html#Database 我现在正在webApp上使用它:
var myBuggedDb = window.openDatabase(shortName, version, displayName,maxSize);
Run Code Online (Sandbox Code Playgroud)
它就像一个魅力.我可以使用它来进行查询,从选择到删除.一切都好,对吗?但是当我检查和调试我的代码时,我看到创建的是一个WebSql数据库.我还咨询了很多博客,维基和其他地方,以获得有关该主题的更多信息.很多人都认为两种技术都搞得一团糟.Phonegap插件页面甚至没有sqlite插件.
现在,我们将更改我们的应用程序,以便从localStorage获取JSON对象并转换它.我想将它插入我们的数据库.但现在我很困惑,我不知道这是webSql还是SQLite.有人可以澄清吗?它会在设备上作为SQLite或WebSql工作吗?
编辑:如果您将来正在寻找这个问题,请谨慎行事:技术变化很大,indexedDB支持正在增长,还有许多其他选项,如Lawchair等.在使用任何东西之前做一点研究!
这个规范http://www.w3.org/TR/webdatabase/说:
该文档在W3C推荐的轨道上,但规范工作已经停止.规范陷入了僵局:所有感兴趣的实现者都使用了相同的SQL后端(Sqlite),但我们需要多个独立的实现来继续标准化路径.
这是否意味着HTML5数据库正在消失,有一段时间我们将使用SQLite的事实上的标准,可能与浏览器的差异?或者W3C是否发布了完成标准的攻击计划?
我即将开发一个应用程序,员工可以在该应用程序中前往客户场所维修机器。他们需要使用平板电脑或任何其他移动设备填写服务卡。在没有互联网连接的情况下,我正在考虑使用HTML5离线存储,主要是IndexedDB在本地存储服务卡(Web表单)数据,并在有互联网的办公室进行同步。与 MySQL 数据库同步。
所以问题是:是否可以将 indexedDB 与 mysql 同步?我从来没有使用过 indexedDB,我只是在做研究,并且看到了它的潜力。
不推荐使用 Web SQL。否则,它可能是更接近的解决方案。
万一上述困难或超出标准,还有其他选择吗?
非常感谢您的意见。
谢谢。
我有以下代码获取json记录集并在客户端Web Sql存储上的三个不同表中插入一些数据.
如何拦截databaseSync()函数的结束?我想要做的是显示一个警报或更好的ajax微调器gif,以便在同步完成时通知用户.
非常感谢你的帮助,ciao!
function databaseSync() {
// table one
$.getJSON("http://192.168.1.40:8888/iOS/mobilesrv/index.php?ACT=one", function(json) {
$.each(json.results, function(i, res) {
db.transaction(function(tx) {
tx.executeSql("INSERT INTO table1 (A, B, C, D) VALUES (?,?,?,?) ", [res.A, res.B, res.C, res.D], onSuccess, onError);
});
});
});
// table two
$.getJSON("http://192.168.1.40:8888/iOS/mobilesrv/index.php?ACT=two", function(json) {
$.each(json.results, function(i, res) {
db.transaction(function(tx) {
tx.executeSql("INSERT INTO table1 (A, B, C, D) VALUES (?,?,?,?) ", [res.A, res.B, res.C, res.D], onSuccess, onError);
});
});
});
// table three
$.getJSON("http://192.168.1.40:8888/iOS/mobilesrv/index.php?ACT=three", function(json) {
$.each(json.results, function(i, res) {
db.transaction(function(tx) …Run Code Online (Sandbox Code Playgroud) 我刚读了一些关于HTML 5 Web SQL数据库的内容.我在这里和谷歌进行了一些搜索,但找不到一个简单的答案.
有人能告诉我,使用它时存储的数据在哪里?在内存或文本文件或其他东西?
什么浏览器支持这个?
使用新的Html 5,有三种主要方式可以在浏览器中存储数据:
我想知道,对于每种类型,数据存储的时间长短?如果用户输入后一天,数据仍然存在?一个月后?还有一年?
谢谢
所以我正在编写一个Web应用程序,需要在离线Web SQL数据库中存储大约40MB的离线数据.它需要在Chrome(桌面),Safari(桌面和移动设备)和Android浏览器中运行.现在我知道这些浏览器支持Web SQL,我知道哪个版本,但我需要知道允许多少存储空间.Safari桌面支持500MB的数据库存储.Safari mobile支持50MB的数据库存储.
然而,我花了几个小时在各处搜索,以找出什么空间镀铬桌面支持和Android浏览器支持但没有找到任何具体的东西.其中一个地方指出镀铬台式机的硬盘限制为5MB,而另一个地方则指出镀铬台式机的限制为25MB(不使用镀铬扩展).Android浏览器的一个来源注意到15MB的限制另一个注意到5MB的限制.任何人都可以指向某个地方,说明Web SQL存储的实际硬限制是什么,适用于android和chrome?