前言

在上一篇前端存储之indexedDB中说到,我们项目组要搞一个前后端分离的项目,要求在前端实现存储,我们首先找到了indexedDB,而我们研究了一段时间的indexedDB后,发现它并不是很适合我们的项目,原因文章后面会讲到,所以我们就继续找,于是我们就找到了Web Sql Database,发现这个前端数据库是比较适合我们的项目的,于是果断转投Web Sql Database的怀抱,找存储工具跟穿鞋一个道理,不在乎多炫酷,合适才是王道,要是因为不合适导致磨脚是走不长远的,既然找到了合适的鞋,不对,合适的存储数据库,当然接下里就是要摸清楚它的性格脾气啊,才能更好地为我们所用,于是便有了这篇文章。

Web Sql Database为何方神圣?

Web Sql Database又名html5本地数据库,是随着HTML5规范加入的在浏览器端运行的轻量级数据库。在HTML5中,大大丰富了客户端本地可以存储的内容,添加了很多功能来将原本必须保存在服务器上的数据转为保存在客户端本地,从而大大提高了Web应用程序的性能,减轻了服务器端的负担,使Web时代重新回到了“客户端为重,服务器为轻”的时代。可以看出,它的用途还是很大的,像对于一些经常需要检索的数据,可以先将其从后台取出,保存到web sql Database中,下次再使用的时候,就不需要再到后台检索了,从而减少对服务器的请求次数,还有就是可以通过web sql Database来做一些离线操作,因为数据已经保存在web sql Database中了。

Web Sql Database的API实际上不是HTML5规范的组成部分,而是单独的规范。它通过一套API来操纵客户端的数据库。Safari、Chrome、Firefox、Opera等主流浏览器都已经支持Web SQL Database。学过数据库的人使用web sql数据库时,就会发现其实它非常有趣,因为你会发现它的存储风格跟我们的mysql之类的数据库很类似,你可以像操作mysql之类的数据库一样操作本地的数据库,很容易上手。虽然 W3C 官方在 2011 年 11 月声明已经不再维护 Web SQL Database 规范,但由于其广泛的实现程度,了解这些 API 对 Web 开发还是非常有必要的。

Web Sql Database VS indexedDB

机智的小伙伴或许已经看出来了,Web Sql Database虽然也是一种在浏览器里存储数据的技术,跟IndexedDB不同的是,WebSQL数据库更像是关系型数据库,而看过我前一篇文章的同学应该清楚,IndexedDB更像是一个NoSQL数据库,使用SQL查询数据,而我们的项目中,恰好很多地方都要做这种关联查询,所以WebSQL 数据库更加适合我们,其实indexedDB也是很好,很强大的!毕竟indexedDB才是现在W3C力荐的啊。

Web Sql Database的三大核心方法

Web SQL Database使用起来真的很简单粗暴,因为它的规范中定义的三个核心方法:

1. openDatabase:这个方法使用现有数据库或创建新数据库创建数据库对象。

var db= openDatabase(数据库名,版本,数据库描述,数据库大小);

eg: var db= openDatabase(“myTestDB”,”1.0”,”我的测试数据库”,10*1024,[回调函数(可以没有)]);

2. transaction:访问数据库,要借用transaction()方法,这个方法允许我们根据情况控制事务提交或回滚。

3. executeSql:这个方法用于执行真实的SQL查询。此方法是异步的,后续的业务逻辑可以在回调函数中处理。

这三个方法是不是一目了然,流程基本就是打开数据库,获取事务,然后执行sql,跟我们使用后端那些数据一毛一样啊!

Web Sql Database的基本操作

1. 打开数据库

if (!window.openDatabase) {

             console.log('该浏览器不支持数据库');

             return false;

         }

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

dataBase = window.openDatabase("myAutoTest.db", "1.0", "自动化测试平台数据库数据库", 10 * 1024 * 1024);

说说openDatabase方法,第一次会创建一个数据库,如果已经存在了,则打开数据库,创建的数据库就存在本地了,应该在你的用户数据的谷歌目录下面,可以自己找找看,我的本地数据库地址是:C:\Users\dengyul\AppData\Local\Google\Chrome\User Data\Default\databases。

2. 创建数据表

就是你写一条建表的sql语句,语法跟mysql之类的数据库一致,然后用executeSql方法执行该sql语句,解释一下executeSql的四个参数吧,第一个表示的是查询的字符串,第二个表示的是插入到查询中问号所在处的字符串数据,第三个是成功时执行的回调函数。返回两个参数:tx和执行的结果,第四个是失败时执行的回调函数。返回两个参数:tx和失败的错误信息。

function() {

dataBase.transaction( function(tx) {

tx.executeSql(

"create table if not exists TEMPLATE (template_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, template_name TEXT)",

[],

function(tx,result){ alert('创建模板表成功'); },

function(tx, error){ alert('创建模板表失败:' + error.message);

});

});

}

3. 添加数据

还是调用executeSql执行插入的sql语句

function () {

dataBase.transaction(function (tx) {

tx.executeSql(

"insert into TEMPLATE (template_name) values(?)",

['模板1'],

function () { alert('添加数据成功'); },

function (tx, error) { alert('添加数据失败: ' + error.message);

} );

});

4. 查询数据

前面我们说过,executeSql执行成功后进入成功的回调函数,而回调函数有一个参数为result,而这个result就是查询出来的数据集。其数据类型为 SQLResultSet,其中最重要的属性—SQLResultSetRowList 类型的 rows 是数据集的“行”,rows 有两个属性:length、item,因此,获取查询结果的某一行某一列的值 :result.rows[i].item[fieldname]。

function () {

dataBase.transaction(function (tx) {

tx.executeSql(

"select * from TEMPLATE ", [],

function (tx, result) { //执行成功的回调函数

//在这里对result 做你想要做的事情吧...........

},

function (tx, error) {

alert('查询失败: ' + error.message);

} );

});

}

5. 更新数据

跟上面基本一致

function (id, name) {

dataBase.transaction(function (tx) {

tx.executeSql(

"update TEMPLATE set template_name = ? where template_id = ?",

[name, id],

function (tx, result) {

//更新后的后续处理

},

function (tx, error) {

alert('更新失败: ' + error.message);

});

});

}

6. 删除数据

跟上面一致,将sql换成删除的语句即可,就不多做赘述了。。。。。。

总结

从上面的CRUD操作中可以看出,Web SQL Database的操作方式对传统开发人员来说还是很友好的,所以掌握起来比较容易, 虽然说Web SQL Database 规范已经废弃,但是学习学习还是很有必要的。通过这些 HTML5 Web SQL Database API 接口,相信以后会出现一些非常优秀的、建立在这些 API 之上的应用程序。

前端存储之Web Sql Database的更多相关文章

  1. (转)HTML5开发学习(3):本地存储之Web Sql Database

    原文:http://www.cnblogs.com/xumingxiang/archive/2012/03/25/2416386.html HTML5开发学习(3):本地存储之Web Sql Data ...

  2. HTML5本地存储——Web SQL Database

    在HTML5 WebStorage介绍了html5本地存储的Local Storage和Session Storage,这两个是以键值对存储的解决方案,存储少量数据结构很有用,但是对于大量结构化数据就 ...

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

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

  4. web sql database数据存储位置

    Q1: 数据存储在哪儿? Web Storage / Web SQL Database / Indexed Database 的数据都存储在浏览器对应的用户配置文件目录(user profile di ...

  5. [转]HTML5本地存储——Web SQL Database

    在HTML5 WebStorage介绍了html5本地存储的Local Storage和Session Storage,这两个是以键值对存储的解决方案,存储少量数据结构很有用,但是对于大量结构化数据就 ...

  6. 《Javascript权威指南》学习笔记之十八:BOM新成就(1)--client存储数据(Web SQL DataBase实现)

    使用本地存储和会话存储能够实现简单的对象持久化,能够对简单的键值对或对象进行存储.可是,对于比較复杂的关系数据进行处理时,就要用Web SQL Database.浏览器对Web SQL Databas ...

  7. HTML5开发学习:本地存储Web Sql Database

       Web Sql Database,中文翻译作"本地数据库",是随着HTML5规范加入的在浏览器端运行的轻量级数据库.    在HTML5中,大大丰富了客户端本地可以存储的内容 ...

  8. HTML5本地存储——Web SQL Database与indexedDB

    虽然在HTML5 WebStorage介绍了html5本地存储的Local Storage和Session Storage,这两个是以键值对存储的解决方案,存储少量数据结构很有用,但是对于大量结构化数 ...

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

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

随机推荐

  1. 【Error】Python:UnicodeDecodeError: ‘XXX' codec can't decode bytes in position... 解决方法

    错误信息: UnicodeDecodeError: ‘XXX' codec can't decode bytes in position 2-5: illegal multibyte sequence ...

  2. 解决hibernate向mysql插入中文乱码问题(更改MySQL字符集)

    1.首先需要修改mysql数据库的配置文件my.ini,此文件放在mysql根目录下.在此文件下查找default-character-set属性,并将其值更改为utf8(注意:不是utf-8,也要注 ...

  3. 强制打开qq

    (function(){ var QQ='10001'; //换成你公司的企业QQ(客服QQ) var str='tencent://message/?Menu=yes&uin='+QQ+'& ...

  4. python模块导入

    官方手册:https://docs.python.org/3/tutorial/modules.html 可执行文件和模块 python源代码文件按照功能可以分为两种类型: 用于执行的可执行程序文件 ...

  5. 汕头市队赛 SRM1X T1

    木之本樱 背景 “西瓜是可以种在树上的!”——木之本樱 描述 空地上,一排排的西瓜树拔地而起. 魔法世界里,空地是无限大的.所有的树排成了n条直线,每条直线也是向左右两端无限延伸的. 由于自己姓木(之 ...

  6. OpenGL入门学习 课程 (三) 绘制几何图形的一些细节问题

    http://oulehui.blog.163.com/blog/static/79614698201191832753312/ 先回顾一下我们都学习了些什么: 第一课,编写第一个OpenGL程序第二 ...

  7. ffmpeg代码笔记2:如何判断MP4文件里面的流是音频还是视频流

    http://blog.csdn.net/qq_19079937/article/details/43191211 在MP4结构体系里面,hdlr字段(具体在root->moov->tra ...

  8. kvm虚拟机最佳实践系列3-kvm克隆和静态迁移

    KVM克隆和KVM静态迁移 KVM克隆 上一章我们已经有了一个合用的虚拟机镜像,现在我们需要用这个KVM镜像大量的创建和部署 virt-clone就是做这个用的.它简化了我们克隆KVM的步骤. 首先停 ...

  9. Linux平台用C++实现事件对象,同步线程

    前文在Win32平台上用C++实现了事件对象Event,对线程进行同步,以达到期望目的.这次在Linux平台上实现与之类似的事件对象.与其相关的一组API包括:pthread_mutex_init,p ...

  10. CPU负载监控

    #!/usr/bin/python #-*- encoding: utf-8 -*- import os import time while True: loadavg=os.popen(" ...