H5之前存储数据一般是通过 cookie ,但是 cookie 存的数据容量比较少。H5 中扩充了文件存储能力,可存储多达 5MB 的数据。现在就实际开发经验来对本地存储 ( Storage ) 的使用做一个总结。

一、cookie 方式

对于 cookie 的使用,可以看我之前写的总结:JS操作cookie

二、H5 localStorage / sessionStorage 本地存储 

localStorage 是一种你不主动清除它,它会一直将存储数据存储在客户端的存储方式,即使关闭了客户端(浏览器) 存储数据也还是存在,属于本地持久层储存。

它和 sessionStorage 不同,sessionStorage 用于本地存储一个会话(session)中的数据,一旦会话关闭,那么数据会消失,比如刷新。

localStorage与sessionStorage具有相同的API,以下方法都可以用于sessionStorage。

1、localStorage 存数据

(1) localStorage.name = 'lyr';

(2) localStorage["name"] = 'lyr';

(3) localStorage.setItem("name","lyr");

以上三种方式都是一样的,存储数据是字符串。

注: localStorage 只能保存字符串,如果数据为对象,需要先转换成字符串。

(4)存储数据是对象:

var obj = new Object();    // 或 var obj = {};
obj.a = a; // 要保存的变量
obj.time = 3; // 存储时间(3天后过期)
obj.saveTime = (new Date()).getTime(); // 保存变量的时间点,这里以时间戳为例 var objString = JSON.stringify(obj); // 对象转换成 JSON 字符串
window.localStorage.setItem('data',objString);

2、localStorage 取数据

与存数据对应的取数据方式如下:

(1) var name= localStorage.name;

(2) var name = localStorage["name"];

(3) var name= localStorage.getItem("name");

以上三种方式都是一样的,取的数据是字符串。

(4)取的数据是对象:

var d= window.localStorage.getItem('data');
var DATA = JSON.parse(d); // 将 JSON 字符串转成对象
var a = DATA.a;
var time = DATA.time;
var saveTime = DATA.saveTime;

3、localStorage 清除特定值

清除 name :
(1) localStorage.removeItem("name");      // localStorage 中没有name这个变量

(2) localStorage.name='';      // localStorage 中 name 这个变量值为空

4、localStorage 清除所有值

localStorage.clear();

5、判断存储数据是否过期

实例:::

存:

 var url_accessKey = 'wx092843322';
var url_userId = '123';
var url_userName = 'lyr';
localStorage.setItem('accesskey', url_accessKey); // 凭证
localStorage.setItem('userId', url_userId); // 用户Id
localStorage.setItem('userName', url_userName); // 用户名
localStorage.setItem('saveTime', (new Date()).getTime());// 保存变量的时间点,当前时间戳

取 saveTime 与 当前时间点比较:

var nowdate = (new Date()).getTime();
var saveTime = localStorage.getItem('saveTime'); var date = nowdate - saveTime;
date= (date/1000/60/60/24);
if (a > 3) {
alert(' 数据过期');
}

上面是存储数据是字符串时候,存储数据是对象也一样,但是记得要进行字符串对象转换。

三、H5 WebSQL 本地数据库

WebSQL 本地数据库 API 实际上不是 H5 规范的组成部分,而是单独的规范,它通过一套 API 来操纵客户端的数据库。目前Safari、Chrome、Firefox、Opera等主流浏览器都已经支持 WebSQL Database。

HTML5 的 WebSQL Databases 中可以用与 mysql 查询一样的查询语句来操作本地数据库,之前学的 mysql 可以用到了,还是挺有趣的。

下面介绍 H5 WebSQL Database API,结合例子说明怎样创建打开数据库,创建表,添加数据,更新数据,删除数据,删除表 。

其中有三个核心方法
(1) openDatabase:这个方法使用现有数据库或创建新数据库创建数据库对象。
(2) transaction:这个方法允许我们根据情况控制事务提交或回滚。
(3) executeSql:这个方法用于执行真实的SQL查询。

1、打开数据库

var dataBase = openDatabase("student", "1.0", "local database demo",204800, function () {  if(!dataBase) { alert("创建数据库失败。"); } else { alert("创建数据库成功。"); } });

openDatabase 方法的参数意义:
1)数据库名称;
2)版本号;
3)对数据库的描述;
4)设置数据的大小;
5)回调函数 (可省略) 。
方法初次调用时是创建数据库,以后就是建立连接了。

2、创建数据表

dataBase.transaction( function(tx) {
tx.executeSql(
"create table if not exists stu (id REAL UNIQUE, name TEXT)",
[],
function(tx,result){ alert('创建stu表成功'); },
function(tx, error){ alert('创建stu表失败:' + error.message);
});
});

executeSql 函数有四个参数,意义:
1)表示查询的字符串,使用的是SQL语言;(必选)
2)插入到查询中问号所在处的字符串数据;(可选)
3)成功时执行的回调函数。返回两个参数:tx和执行的结果;(可选)
4)失败时执行的回调函数。返回两个参数:tx和失败的错误信息;(可选)

3、增删查改

1)添加数据:

dataBase.transaction(function (tx) {
tx.executeSql(
"insert into stu (id, name) values(?, ?)",
[id, '徐明祥'],
function () { alert('添加数据成功'); },
function (tx, error) { alert('添加数据失败: ' + error.message);
});
});

2)删除数据:

dataBase.transaction(function (tx) {
tx.executeSql(
"delete from stu where id= ?",
[id],
function (tx, result) { },
function (tx, error) { alert('删除失败: ' + error.message);
});
});

3)删除数据表:

dataBase.transaction(function (tx) {
tx.executeSql('drop table stu');
});

4)查询数据:

dataBase.transaction(function (tx) {
tx.executeSql(
"select * from stu", [],
function (tx, result) { //执行成功的回调函数
//在这里对result 进行处理
},
function (tx, error) {
alert('查询失败: ' + error.message);
});
});

上面代码中执行成功的回调函数中的参数 result 表示查询出来的数据集,其数据类型为 SQLResultSet ,如同 C# 中的 DataTable。

SQLResultSet 的定义为:

interface SQLResultSet {
readonly attribute long insertId;
readonly attribute long rowsAffected;
readonly attribute SQLResultSetRowList rows;
};

其中最重要的属性 SQLResultSetRowList 类型的 rows 是数据集的“行” 。 
rows 有两个属性:length、item 。
所以,在获取查询结果的第一行列名为name的值时:result.rows.item(0).name

5)更新数据:

dataBase.transaction(function (tx) {
tx.executeSql(
"update stu set name = ? where id= ?",
[name, id],
function (tx, result) {
},
function (tx, error) {
alert('更新失败: ' + error.message);
});
});

4、实例展示。

总体流程:填写联系人,提交后存在本地数据库中,并且以表格的形式展示在页面中。

(1)初始(数据库中没有数据):

(2)填写信息后提交:

(3)提交成功后,数据库中的字段会展示在下面:

Web SQL 中的数据库 contactdb 中的 contact 数据表如下所示:

(4)删除操作:

删除刚刚添加的数据之后,Web SQL 中的数据库 contactdb 中的 contact 数据表如下所示:

至此,我的 H5 本地存储总结就写完了。

H5本地存储详解的更多相关文章

  1. HTML5本地存储详解

    HTML5storage提供了一种方式让网站能够把信息存储到你本地的计算机上,并再以后需要的时候进行获取.这个概念和cookie相似,区别是它是为了更大容量存储设计的.Cookie的大小是受限的,并且 ...

  2. H5本地存储详细使用教程(localStorage + JSON数据存储应用框架)

    一.Web Storage教程 1.概述: 对于Web Storage来说,实际上是Cookies存储的进化版.如果了解Cookie的人几乎一看Web Storage就会用,如果你从来没用过没了解过C ...

  3. h5 本地存储

    H5本地存储有两个API,一个是Web Storage,还有一个是Web SQL.不管是哪一个,都是基于JavaScript语言来使用,接下来我就教你怎么使用H5本地存储,本文篇幅较大,JS代码较多, ...

  4. 利用H5本地存储localStorage、sessionStorage

    最近的业务处理上,要使用cookie缓存储一下数据,公司的cookie还搞出点问题.而用户的浏览器都是利用微信的内置,普遍支持h5的本地存储.于是利用了这个... 现代浏览器普遍开始支持H5本地存储, ...

  5. Hbase存储详解

    转自:http://my.oschina.net/mkh/blog/349866 Hbase存储详解 started by chad walters and jim 2006.11 G release ...

  6. H5本地存储(转)

    H5本地存储  一.本地存储由来的背景         众所周知Html4时代Cookie的大小.格式.存储数据格式等限制,网站应用如果想在浏览器端存储用户的部分信息,那么只能借助于Cookie.但是 ...

  7. 浏览器相关--H5本地存储

    因为项目需要,最近研究了一下HTML5本地存储相关的东西,在这简单的记录一下. 浏览器存储主要包括一下几个部分1. cookie2. localStorage3. sessionStorage4. i ...

  8. html5的web存储详解

    以前我们在本地存储数据都是用document.cookie来存储的,但是由于其的存储大小只有4K左右,解析也很复杂,给开发带来了诸多的不便.不过现在html5出了web的存储,弥补了cookie的不足 ...

  9. H5 本地存储一

    localStorage(本地存储),可以长期存储数据,没有时间限制,一天,一年,两年甚至更长,数据都可以使用.sessionStorage(会话存储),只有在浏览器被关闭之前使用,创建另一个页面时同 ...

随机推荐

  1. \lib\cmsis\stm32f10x.h(298): error: #67: expected a "}"

    首先介绍一下csdn屏蔽广告 这个至关重要,请参考 https://blog.csdn.net/qq_40881680/article/details/82226562 更新KEIL5以后,原KEIL ...

  2. mysql常用的存储引擎,MyISAM和InnoDB的对比

    Mysql有多种存储引擎,最常用的有MyISAM和InnoDB这两种,每一种类型的存储引擎都有自已的特点,可以结合项目中数据的使用场景来进行了哪种存储引擎合适. 1:查看mysql数据库支持的存储引擎 ...

  3. windows环境安装haproxy及初步配置负载均衡使用示例

    安装HaProxy 首先需要下载windows环境下需要文件,这里下载的是一个别人编译好的一个文件,这里省去了编译的过程,使用的版本是haproxy-1.7.8. 下载后直接解压到对应的目录下.示例( ...

  4. element-ui组件,全选树节点,新增数据子节点数据,出现回填问题

    案情分析:全选后父节点被选中保存,在这个树节点下新增数据时,就会出现,也被选中,事实上数据是没有被选中,也就意味着权限未被配置,而显示是已经配置了,显然这个是一个bug 1.处理前,直接用下面的方法很 ...

  5. Aop动态代理和cglib

    一般我们使用Aop对象时,常用动态代理模式,即是采用映射一个相同的类在此基础上进行前置后置操作. 动态代理多是采用原类实现父类接口,然后动态代理一个和原类相同的双胞胎兄弟类来实现映射. 父类 publ ...

  6. Bind Mounts and File System Mount Order

         When you use the bind option of the mount command, you must be sure that the file systems are m ...

  7. awk 内置函数的使用

    转自:http://gdcsy.blog.163.com/blog/static/12734360920130241521280/ 一.split 初始化和类型强制        awk的内建函数sp ...

  8. 记录一下set的用法

    set译为集合,是一个内部自动有序且不含重复元素的容器 有时出现需要去掉重复元素的情况 而且有可能因这些元素比较大或者类型不是int型而不能直接开散列表 在这种情况下就可以用set来保留元素本身而不考 ...

  9. 由浅入深剖析 go channel

    原文:https://www.jianshu.com/p/24ede9e90490 ---------------------------------- 由浅入深剖析 go channel chann ...

  10. 本月周六周日LIST集合

    最近项目中有用到本月所有的周六,周日,特此分享一下! 算法思路:写一个循环,条件为本月开始日期.本月截至日期,通过循环获取第一个周六,加一天就是周日,每增加六天就是下一个周六,依次类推,循环到月末 代 ...