设为首页 收藏本站
查看: 985|回复: 0

[经验分享] HTML5本地存储——Web SQL Database

[复制链接]

尚未签到

发表于 2018-10-21 09:44:16 | 显示全部楼层 |阅读模式
  在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 规范中定义的三个核心方法:

  •   openDatabase:这个方法使用现有数据库或新建数据库来创建数据库对象
  •   transaction:这个方法允许我们根据情况控制事务提交或回滚
  •   executeSql:这个方法用于执行SQL 查询
openDatabase
  我们可以使用这样简单的一条语句,创建或打开一个本地的数据库对象
var db = openDatabase('testDB', '1.0', 'Test DB', 2 * 1024 * 1024);  openDatabase接收五个参数:

  •   数据库名字
  •   数据库版本号
  •   显示名字
  •   数据库保存数据的大小(以字节为单位 )
  •   回调函数(非必须)
  如果提供了回调函数,回调函数用以调用 changeVersion() 函数,不管给定什么样的版本号,回调函数将把数据库的版本号设置为空。如果没有提供回调函数,则以给定的版本号创建数据库。
transaction
  transaction方法用以处理事务,当一条语句执行失败的时候,整个事务回滚。方法有三个参数

  •   包含事务内容的一个方法
  •   执行成功回调函数(可选)
  •   执行失败回调函数(可选)

db.transaction(function (context) {  
           context.executeSql('CREATE TABLE IF NOT EXISTS testTable (id unique, name)');
  
           context.executeSql('INSERT INTO testTable (id, name) VALUES (0, "Byron")');
  
           context.executeSql('INSERT INTO testTable (id, name) VALUES (1, "Casper")');
  
           context.executeSql('INSERT INTO testTable (id, name) VALUES (2, "Frank")');
  
         });

  这个例子中我们创建了一个table,并在表中插入三条数据,四条执行语句任何一条出现错误,整个事务都会回滚
executeSql
  executeSql方法用以执行SQL语句,返回结果,方法有四个参数

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

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

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

完整示例

  
    Web SQL Database
  
   
  
        var db = openDatabase('testDB', '1.0', 'Test DB', 2 * 1024 * 1024);        var msg;
  
        db.transaction(function (context) {
  
           context.executeSql('CREATE TABLE IF NOT EXISTS testTable (id unique, name)');
  
           context.executeSql('INSERT INTO testTable (id, name) VALUES (0, "Byron")');
  
           context.executeSql('INSERT INTO testTable (id, name) VALUES (1, "Casper")');
  
           context.executeSql('INSERT INTO testTable (id, name) VALUES (2, "Frank")');
  
         });
  

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

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



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-624349-1-1.html 上篇帖子: Web安全之SQL注入***技巧与防范 下篇帖子: 关于sql server日志变得超大的删除解决办法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表