HTML5本地存储初探(二)
作者:Robin 来源:Time Machine 发布时间:2010-03-07 15:47:00
完成了UI,我们就需要对数据进行处理了。
在开始“数据”的本地存储之前,我们先来了解一下client-side database storage API:
the client-side database storage API allows web applications to store structured data locally using a medium many web developers are already familiar with – SQL.--webkit blog
目前只有webkit核心的浏览器支持这一特性。你甚至都不能在w3c的html5工作草案中找到 (cs-db)client-side database 的详细描述。
首先我们要尝试建立一个数据库链接:
try { if(!window.openDatabase){ //检测浏览器是否支持cs-db alert('not supported cs-db!'); } else { var shortName = 'noteDB'; var version = '1.0'; var displayName = 'Note book database'; var maxSize = 65536; //创建一个数据库 var db = openDatabase(shortName,version,displayName,maxSize); }} catch(e){ //尝试捕获错误 if (e == 2){ alert('Invalid database version.'); } else { alert("Unknown error "+e+"."); }}
如果以上代码无误,你就会在safair或者chrome的开发者工具中看到这个数据库:
在右侧区域可以直接执行一些sql查询,但是我总是得到 “发生意外错误“0”。” 这样的结果,不知道是不是RP的问题。
接下来就是创建表,以及执行一些sql语句进行增删改查。
js执行sql的基本语法大致是这样的:
db.transaction( function (transaction){ transaction.executeSql(sqlquery,[],dataHandler, errorHandler); });
其中transaction.executeSql中参数依次为:sql查询字符串,传递给sql查询的参数,数据处理句柄,错误处理句柄。其中只有第一项为必选,其余都为可选项。
第二个参数的用法大致是这样的:
transaction.executeSql("UPDATE people set age=? where name=?;",[ age, name ]);
查询字符串中的“ ?” 会被后面数组中的变量依次替换。
注意:以上我用了“大致”这个词,因为没有官方的文档 (W3C-web database),只是从一些其它文献以及自己判断得来,若有错误还请指正。
下面我们创建一张用来存储note的表:
db.transaction( function (transaction){ transaction.executeSql( 'CREATE TABLE IF NOT EXISTS notes (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,titel TEXT, note TEXT NOT NULL, date DATE);',errorHandler); });
errorHandler是这样的:
function errorHandler(transaction, error){ alert('Error was: '+ error.message +'(Code:'+ error.code +')'); var fatal_error = true; if(fatal_error){ return true; } return false;}
error.message 是一段错误描述,error.code 是错误代码 (详情)
再看看如果从db中检索出数据并显示到页面上:
db.transaction( function (transaction){ transaction.executeSql("SELECT * from notes;",[],dataHandler, errorHandler); });function dataHandler(transaction, results){ var string = ""; for (var i = 0; i" + row['titel'] + ""; } var listConts = $('listCont'); listConts.innerHTML = string;}
可以看出,基本上和php之类后端语言操作大同小异。
更多代码可查看示例程序,不再一一罗列。
搞定了数据的本地存储之后,接下来就要看看如何将文件储存到本地。


猜你喜欢
- 前言一年一度的虐狗节终于过去了,朋友圈各种晒,晒自拍,晒娃,晒美食,秀恩爱的。程序员在晒什么,程序员在加班。但是礼物还是少不了的,送什么好?
- 周期置换密码参考教材:《现代密码学教程》P47 3.1.2加密解密过程周期置换密码是将明文p串按固定长度m分组.然后对每组中的子串按1,2&
- 一、介绍数据库的约束是对表中数据进行的一种限制,为了保证数据的正确性、有效性、完整性。无论是在添加数据还是在删除数据的时候,都能提供帮助。所
- 前言为什么做出这个?就是有时候从网上下载的资料中的pdf有水印,看着不舒服。比如说我从网上下载的试卷,然后去打印店打印,打印之后水印看着很不
- 1.问题及解决办法(1)问题:由于存储的时间戳是时间戳为GMT(格林尼治标准时间),以秒储存,但由于需要获取的是北京时间,存在时区问题。如何
- Nonetype和空值是不一致的,可以理解为Nonetype为不存在这个参数,空值表示参数存在,但是值为空判断方式如下:if hostip
- js的setTimeout方法用处比较多,通常用在页面刷新了、延迟执行了等等。但是很多javascript新手对setTimeout的用法还
- 本文介绍了Python字符串格式化,主要有两种方法,分享给大家,具体如下用于字符串的拼接,性能更优。字符串格式化有两种方式:百分号方式、fo
- jsonpathjsonpath 用于多层嵌套 json格式的 解析。pip install jsonpathJsonPath描述$根节点@
- 处理数据的时候,偶然遇到要把一个Dataframe中的某些行添加至一个空白的Dataframe中的问题。最先想到的方法是创建Datafram
- 取得 Oracle 10g 安装程序,或从 Oracle 技术网(OTN)下载光盘映像。在评估阶段您可以免费下载和使用无技术限制的全功能 O
- 在写一个多线程类的时候调用报错 RuntimeError: thread.__init__() not calledclass Notify
- 前言openpyxl是Python下的Excel库,它能够很容易的对Excel数据进行读取、写入以及样式的设置,能够帮助我们实现大量的、重复
- /*Bresenham画圆算法*/var arc = function(x0,y0,r){/*起点坐标x0,y
- 今天学到Python 有一个名为 random 的内置模块,可用于生成随机数,这个好玩~可以用来做为上课随机点名的程序了哈哈。。def ma
- 删除一,你可以先把类型为varchar的字段该名,再加以个字段为要该为date的字段名相同,二,1,测试表create table TEST
- /* JS代码部分 */ 3 const date = new Date()const years = []const months = [
- 存储和读取ASCII码形式的byte数据Python可以存byte数据到txt,但不要用str的方式直接存,转成数字列表储存,这样方便读取L
- 我们的项目使用了bootstrapValidator来作为前端校验,但是表单里面有一个UEditor,它用bootstrapValidato
- 按下键的时候,焦点要落在窗口上,不能落在cmd窗口上。另外,一般在imshow()后要使用waitKey(),给图像绘制留下时间,不然窗口会