所有分类
  • 所有分类
  • 后端开发
HTML 5新潮存储法宝:Web SQL Database揭秘

HTML 5新潮存储法宝:Web SQL Database揭秘

这个文档曾经在W3C推荐规范上,但规范工作已经停止了。openDatabase:这个方法使用现有数据库或新建数据库来创建数据库对象我们可以使用这样简单的一条语句,创建或打开一个本地的数据库对象Cache等html5新增内容看的一清二楚,免去

Web SQL Database介绍

HTML 5那个Web Storage里头,除了大家熟知的本地存储Local Storage和会话存储Session Storage这两种类型以外,还有一种叫做Web SQL Database的概念。你也可以把它理解为一种用SQL管理客户端数据库的方法,尽管这个规范现在不再更新,但依然很有价值去研究。说白了,就是为了应对大规模的结构化数据,让浏览器也能有数据库那样的操作手段呗。不过,因为规范停滞不前,现在我们就得来仔细看看这种方式的特性,跟其他存储方案比起来怎么样。

HTML 5新潮存储法宝:Web SQL Database揭秘

Web SQL Database规范中的核心方法

我们在网上用到的Web SQL Database有三种主要方法:openDatabase、transaction和executeSql,它们能帮我们建数据库、搞事务和运行SQL查询。用这几个方法,我们就能随心所欲地操控客户端上的数据库了,无论是存储还是检索数据都很方便。虽然现在这个规范已经不太实用了,但是看看还是挺有意思,能让我们更好地理解浏览器里的数据库操作是怎么回事。

openDatabase方法详解

要用Web SQL Database做点事儿,首先得掌握这个开数据库户头儿的灵魂招式——openDatabase。你只需传它几个必需的参数(名字小版本号,数据容量啥的)就能搞好数据库模型。更厉害的是,它还能接个小回调函数做后手,里面你爱怎么折腾都行!尽管现在官方对这东西有点不待见了,但是学懂了这个openDatabase,你就对创建数据库有更深的理解。

咱们平时用的时候,只需要简单地调用 openDatabase 这个方法,填点儿数据库名,版本啊啥的,再按照自己的需要设个回调函数和其它细节,就能搞定了。这样就能在网页上搞出个符合你要求的数据库环境!

transaction方法应用场景

Web SQL Database上的Transaction方法真的很强大!它能准确应对执行SQL语句出错导致的问题,让整个事务回到开始前的状态。这样的设计特别适合处理那些复杂的数据操作,对咱们来说是个好帮手~

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

咱们在开发时,用上这个 transaction 方法就能把好几条 SQL 语句放在一起运行,形成了一套完整的事务流程。要是中途出了岔子,比如哪条语句没能跑起来,那么整件事情就会打回原形,保证不会有任何的数据丢失或者乱七八糟的情况发生。特别是涉及到那些敏感信息或者对数据准确度要求特别高的地方,这种防护措施就尤其关键!

executeSql方法实践演示

在Web SQL Database里头,你知道那个叫啥子吗?就是那个能让咱们给数据库运行SQL查询命令然后还能收到结果的。只要传给它个查询字符串这样的东西,咱就能在网页上轻松玩转数据库,而且还能按照查询出来的结果来做自己想做的事情。这个方法还有成功或者失败的回调函数拿来用,让咱们能根据执行的情况继续后续的步骤!

比如说,咱们完全可以用executeSql解决问题!比如把一条SQL命令输进去,该插就插,该更就更,该删就删——就这么简单!然后根据返回结果做点提示或者告诉用户,就搞定!这样一来,咱们就能跟客户端的那个数据库打交道,想弄啥就弄啥了。这个办法可是给程序员们省了大功夫,直接操纵客户端的数据库,方便得很呀~

Web SQL Database废弃原因分析

虽然Web SQL Database早就是W3C推荐标准,但用起来还是有困难,结果就没用了。最大的缺点就是大家都用SQLite当后台数据库,没啥多样性和独立性。这一来让Web SQL Database既不能完全满足规范要求,又很难平衡各方面的利害关

因为Web SQL Database这东西已经过时了,而且还有一堆麻烦没搞定,所以HTML5正在制定的新规则里已经不怎么提它了。做开发的同学们和用得起的小伙伴们,找地方存数据的时候要考虑一下将来可能会有什么变化,早点儿做好准备。

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")');
         });

与IndexedDB比较

对于被淘汰的Web SQL Database,我们有一个新朋友,那就是HTML5下的IndexedDB。这个东东功能强,效率高,能满足客户对数据的各种需求,而且大部分浏览器都支持它,也让很多开发者选择用它来编程。比起老旧的Web SQL Database,IndexedDB更贴近现在的WEB标准,还更能适应不同环境,方便升级!

IndexedDB作为新趋势,在浏览器本地存储的领域中越来越受欢迎了,成了大家都爱用的稳定可靠的选项之一。现在,开发人员更愿意选择它来做客户端数据库处理,逐渐取代那些像Web SQL Database那样过时的技术方法。

结语与思考

说到HTML5 WebStorage的那个WebSQLDatabase,我们就研究了它有啥特别之处,搞懂了怎么用和跟别的存储方式比哪个好之类的话题。虽然WebSQLDatabase现在已经不搞了,还有好多问题解决不了,但是学完它的思想和用途还是有意义的。

你们觉得在现在这个WEBGAME开发圈子里,怎么看老旧技术和新的解决办法?有用过像Web SQL Database或IndexedDB这样的方法来做过项目吗?赶紧留言聊聊你们的想法和经历!

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);
            }
         });
        });    

原文链接:https://www.icz.com/technicalinformation/web/2024/04/12936.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?