在HTML5 WebStorage介绍了html5本地存储的Local Storage和Session Storage,这两个是以键值对存储的解决方案,存储少量数据结构很有用,但是对于大量结构化数据就无能为力了,灵活大不够强大。

Web SQL Database

我们经常在数据库中处理大量结构化数据,html5引入Web SQL Database概念,它使用 SQL 来操纵客户端数据库的 API,这些 API 是异步的,规范中使用的方言是SQLlite,悲剧正是产生于此,Web SQL Database规范页面有着这样的声明

This document was on the W3C Recommendation track but specification work has stopped. The specification reached an impasse: all interested implementors have used the same SQL backend (Sqlite), but we need multiple independent implementations to proceed along a standardisation path.

大概意思就是

这个文档曾经在W3C推荐规范上,但规范工作已经停止了。目前已经陷入了一个僵局:目前的所有实现都是基于同一个SQL后端(SQLite),但是我们需要更多的独立实现来完成标准化。

也就是说这是一个废弃的标准了,虽然部分浏览器已经实现,但。。。。。。。

三个核心方法

但是我们学一下也没什么坏处,而且能和现在W3C力推的IndexedDB做比较,看看为什么要废弃这种方案。Web SQL Database 规范中定义的三个核心方法:

  1. openDatabase:这个方法使用现有数据库或新建数据库来创建数据库对象
  2. transaction:这个方法允许我们根据情况控制事务提交或回滚
  3. executeSql:这个方法用于执行SQL 查询

openDatabase

我们可以使用这样简单的一条语句,创建或打开一个本地的数据库对象:

var db = openDatabase('testDB', '1.0', 'Test DB', 2 * 1024 * 1024);

openDatabase接收五个参数:

  1. 数据库名字
  2. 数据库版本号
  3. 显示名字
  4. 数据库保存数据的大小(以字节为单位 )
  5. 回调函数(非必须)

如果提供了回调函数,回调函数用以调用 changeVersion() 函数,不管给定什么样的版本号,回调函数将把数据库的版本号设置为空。如果没有提供回调函数,则以给定的版本号创建数据库。

transaction

transaction方法用以处理事务,当一条语句执行失败的时候,整个事务回滚。方法有三个参数

  1. 包含事务内容的一个方法
  2. 执行成功回调函数(可选)
  3. 执行失败回调函数(可选)
1 db.transaction(function (context) {
2            context.executeSql('CREATE TABLE IF NOT EXISTS testTable (id unique, name)');
3            context.executeSql('INSERT INTO testTable (id, name) VALUES (0, "Byron")');
4            context.executeSql('INSERT INTO testTable (id, name) VALUES (1, "Casper")');
5            context.executeSql('INSERT INTO testTable (id, name) VALUES (2, "Frank")');
6          });

这个例子中我们创建了一个table,并在表中插入三条数据,四条执行语句任何一条出现错误,整个事务都会回滚

executeSql

executeSql方法用以执行SQL语句,返回结果,方法有四个参数

  1. 查询字符串
  2. 用以替换查询字符串中问号的参数
  3. 执行成功回调函数(可选)
  4. 执行失败回调函数(可选)

在上面的例子中我们使用了插入语句,看个查询的例子

1 db.transaction(function (context) {
2            context.executeSql('SELECT * FROM testTable', [], function (context, results) {
3             var len = results.rows.length, i;
4             console.log('Got '+len+' rows.');
5                for (i = 0; i < len; i++){
6               console.log('id: '+results.rows.item(i).id);
7               console.log('name: '+results.rows.item(i).name);
8             }
9          });

完整示例:

 1 <!DOCTYPE HTML>
 2 <html>
 3 <head>
 4     <title>Web SQL Database</title>
 5 </head>
 6 <body>
 7     <script type="text/javascript">
 8         var db = openDatabase('testDB', '1.0', 'Test DB', 2 * 1024 * 1024);
 9         var msg;
10         db.transaction(function (context) {
11            context.executeSql('CREATE TABLE IF NOT EXISTS testTable (id unique, name)');
12            context.executeSql('INSERT INTO testTable (id, name) VALUES (0, "Byron")');
13            context.executeSql('INSERT INTO testTable (id, name) VALUES (1, "Casper")');
14            context.executeSql('INSERT INTO testTable (id, name) VALUES (2, "Frank")');
15          });
16
17         db.transaction(function (context) {
18            context.executeSql('SELECT * FROM testTable', [], function (context, results) {
19             var len = results.rows.length, i;
20             console.log('Got '+len+' rows.');
21                for (i = 0; i < len; i++){
22               console.log('id: '+results.rows.item(i).id);
23               console.log('name: '+results.rows.item(i).name);
24             }
25          });
26         });
27     </script>
28 </body>
29 </html>

最后

由于Web SQL Database规范已经被废弃,原因说的很清楚,当前的SQL规范采用SQLite的SQL方言,而作为一个标准,这是不可接受的,每个浏览器都有自己的实现这还搞毛的标准。这样浏览器兼容性就不重要了,估计慢慢会被遗忘。不过Chrome的控制台真心好用啊,神马cookie、Local Storage、Session Storage、Web SQL、IndexedDB、Application Cache等html5新增内容看的一清二楚,免去了很多调试代码工作。

转载于:https://www.cnblogs.com/joyco773/p/6164942.html

HTML5本地存储——Web SQL Database相关推荐

  1. HTML5中的本地数据库-Web SQL Database

    html5增加新的特性,那就是增加了本地存储!改善用户体验,或许html5会带着我们走进新的互联网时代. 下面看看怎样操作web 数据库吧!!首先新建数据库!  var db = window.ope ...

  2. (五)HTML5本地存储——Web Storage

    Web应用的发展,使得客户端存储使用得也越来越多,而实现客户端存储的方式则是多种多样.最简单而且兼容性最佳的方案是Cookie,但是作为真正的客户端存储,Cookie则存在很多致命伤.此外,在IE6及 ...

  3. HTML5 本地存储 Web Storage

    Web Storage Web Storage 是一项非常重要,并且很实用的技术,已经被大多数浏览器(包括IE8)所支持, 在HTML4时代, 虽然cookie无处不在,但cookie仍然有自己的硬伤 ...

  4. html5 本地存储Web Storage

    在过去本地存储数据基本都是使用cookies保存一些简单的数据,使用cookies存储永久数据存在以下几个问题: 1.cookies的大小被限制在4KB: 2.cookies是随HTTP事务一起发送的 ...

  5. HTML5本地存储——IndexedDB

    在HTML5本地存储--Web SQL Database提到过Web SQL Database实际上已经被废弃,而HTML5的支持的本地存储实际上变成了 Web Storage(Local Stora ...

  6. HTML5 API详解(17):Web SQL DataBase本地数据库

    Web SQL Database是一个已经废弃的规范,但是鉴于除了IE和Firefox,其他浏览器都已经实现了Web SQL Database,并且它还具有一些HTML5 Storage所不具有的特性 ...

  7. HTML5 学习笔记(三)——本地存储(LocalStorage、SessionStorage、Web SQL Database)

    一.HTML4客户端存储 B/S架构的应用大量的信息存储在服务器端,客户端通过请求响应的方式从服务器获得数据,这样集中存储也会给服务器带来相应的压力,有些数据可以直接存储在客户端,传统的Web技术中会 ...

  8. HTML5开发 Web SQL Database 本地数据库

    Web Database 介绍 Web SQL数据库API实际上不是HTML5规范的组成部分,而是单独的规范.它通过一套API来操纵客户端的数据库.Safari.Chrome.Firefox.Oper ...

  9. HTML5客户端数据存储机制Web Storage和Web SQL Database

    引言 html5本地存储可以选择两种方式,一种是本地存储,一种是sqlite. 比如开发html5的购物车功能,就可以考虑选择其中之一,进行本地存储与操作. 又或者保存用户登录信息,可以使用local ...

最新文章

  1. 全球数百万台 Mac 疑似因 Big Sur 更新险酿计算灾难,苹果官方回应来了!
  2. centos7 yum 错误 This system is not registered with an entitlement server
  3. Flink从入门到精通100篇(三)-如何利用InfluxDB+Grafana搭建Flink on YARN作业监控大屏环境
  4. TensorFlow + Docker + PyCharm
  5. HDU 1285 - 确定比赛名次(拓扑排序)
  6. Python中numpy中tile和repeat用法和区别
  7. ByteBuffer
  8. iBatis.Net异步多线程 操作Ibatis报错
  9. sql server权限_保护SQL Server审核的访问权限
  10. 深度学习TensorFlow的55个经典案例
  11. python selenium 点击 报错v_python菜鸟初学selenium+chromedrive,简单点击出错,请指教...
  12. 关于浏览器Ajax请求Type为Request Payload而不是Form Data
  13. Hadoop安装实验报告
  14. java性能调优原因和因素
  15. 大学计算机应用基础第三版梁洁,《大学计算机应用基础(第3版)/高等学校教材》低价购书_教材教辅考试_孔网...
  16. 学硕计算机可考大数据博士吗,专硕考博比学硕考博难度更大吗?听听上岸的人怎么说...
  17. Google BETA版本测试介绍
  18. Hark的数据结构与算法练习之归并排序
  19. 菜鸟站长之家教各位菜鸟站长用WordPress如何给文章生成推广二维码
  20. centOS最全下载地址

热门文章

  1. 微软Kinect 1.7 附带ColorBasics-D2D示例程序基本解析
  2. Linux内核源码学习
  3. vue中使用transition标签底部导航闪烁问题
  4. 3.1 普通型生成函数
  5. Python3NumPy——数组(2)之数学空间与NumPy空间
  6. Tortoisegit和GitHub使用入门
  7. 【机器学习】谷歌的速成课程(二)
  8. Springboot-读取核心配置文件及自定义配置文件
  9. Chrome浏览器如何不让它缓存?
  10. Android之动态改变控件大小