前言

在上一篇前端存储之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. 打开数据库

  1. if (!window.openDatabase) {
  2.  
  3. console.log('该浏览器不支持数据库');
  4.  
  5. return false;
  6.  
  7. }
  8.  
  9. //1.数据库名字 2.数据库版本号 3.显示名字 4.数据库保存数据大小(以字节Byte为单位 10M)5.回调函数(非必须)
  10.  
  11. 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和失败的错误信息。

  1. function() {
  2.  
  3. dataBase.transaction( function(tx) {
  4.  
  5. tx.executeSql(
  6.  
  7. "create table if not exists TEMPLATE (template_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, template_name TEXT)",
  8.  
  9. [],
  10.  
  11. function(tx,result){ alert('创建模板表成功'); },
  12.  
  13. function(tx, error){ alert('创建模板表失败:' + error.message);
  14.  
  15. });
  16.  
  17. });
  18.  
  19. }

3. 添加数据

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

  1. function () {
  2.  
  3. dataBase.transaction(function (tx) {
  4.  
  5. tx.executeSql(
  6.  
  7. "insert into TEMPLATE (template_name) values(?)",
  8.  
  9. ['模板1'],
  10.  
  11. function () { alert('添加数据成功'); },
  12.  
  13. function (tx, error) { alert('添加数据失败: ' + error.message);
  14.  
  15. } );
  16.  
  17. });

4. 查询数据

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

  1. function () {
  2.  
  3. dataBase.transaction(function (tx) {
  4.  
  5. tx.executeSql(
  6.  
  7. "select * from TEMPLATE ", [],
  8.  
  9. function (tx, result) { //执行成功的回调函数
  10.  
  11. //在这里对result 做你想要做的事情吧...........
  12.  
  13. },
  14.  
  15. function (tx, error) {
  16.  
  17. alert('查询失败: ' + error.message);
  18.  
  19. } );
  20.  
  21. });
  22.  
  23. }

5. 更新数据

跟上面基本一致

  1. function (id, name) {
  2.  
  3. dataBase.transaction(function (tx) {
  4.  
  5. tx.executeSql(
  6.  
  7. "update TEMPLATE set template_name = ? where template_id = ?",
  8.  
  9. [name, id],
  10.  
  11. function (tx, result) {
  12.  
  13. //更新后的后续处理
  14.  
  15. },
  16.  
  17. function (tx, error) {
  18.  
  19. alert('更新失败: ' + error.message);
  20.  
  21. });
  22.  
  23. });
  24.  
  25. }

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. 幸运数字(luckly)

    幸运数字(luckly) 题目描述 A国共有 nn 座城市,这些城市由 TeX parse error: Misplaced & 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有 ...

  2. NOIP2017赛前模拟11月2日总结

    分数爆炸的一天··但也学了很多 题目1:活动安排 给定n个活动的开始时间与结束时间··只有一个场地··要求保留尽量多的活动且时间不冲突···场地数n<=100000 考点:贪心 直接将结束时间按 ...

  3. Codeforces Round #281 (Div. 2) B 模拟

    B. Vasya and Wrestling time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  4. wordpress对使用的国外主题进行本地汉化

    wordpress有非常多优秀与专业的主题,当然大多数是非中文的 这些主题本身总会有些无法通过wordpress admin后台来配置的在页面上的英文输出 此时你可以去对应的代码去改掉那些输出,不过这 ...

  5. go环境安装

    选择想要安装的版本: http://golangtc.com/download tar -zxf go1.8.linux-amd64.tar.gz cp -R go/ /usr/local/ vi / ...

  6. 谈谈dpdk应用层包处理程序的多进程和多线程模型选择时的若干考虑

    看到知乎上有个关于linux多进程.多线程的讨论:http://www.zhihu.com/question/19903801/answer/14842584 自己项目里也对这个问题有过很多探讨和测试 ...

  7. 华为上机测试题(大数相乘-java)

    PS:这个不是自己写的,测试OK,供参考. /** * 大数相乘 */ public class BigData { public static void main(String[] args) { ...

  8. SSM整合过程中出现的问题

    1.Caused by: java.lang.ClassNotFoundException: org.springframework.jdbc.datasource.DataSourceTransac ...

  9. Django简单设置cookies和session

    一.Cookie cookie及特点 Cookie是由服务器(网站)生成的,存储在浏览器端的 键值对数据(通常经过加密) 在响应请求时,服务器会把生成 Cookie数据 发给浏览器,浏览器会自动保存( ...

  10. 二十六个月Android学习工作总结【转】

    原文:二十六个月Android学习工作总结 1.客户端的功能逻辑不难,UI界面也不难,但写UI花的时间是写功能逻辑的两倍.     2.写代码前的思考过程非常重要,即使在简单的功能,也需要在本子上把该 ...