所有分类
  • 所有分类
  • 后端开发
HTML5存储大揭秘:IndexedDB VS Web SQL Database,谁更强大?

HTML5存储大揭秘:IndexedDB VS Web SQL Database,谁更强大?

database实际上已经被废弃,而html5的支持的本地存储实际上变成了store以供后面使用,这正是onupgradeneeded的一个重要作用,修改一下之前代码

IndexedDB的基本概念

var request=window.indexedDB.open('testDB');

HTML5里的本地存储挺重要的,IndexedDB就是这种存储方法中的一种。比淘汰掉的Web SQL Database,IndexedDB更强大、灵活。用的时候得先明白那几个基本概念和原理,毕竟IndexedDB是个事务性数据库系统!它靠对象存储空间存数据,能放不少结构化数据,还有事务操作和索引。跟传统的SQL数据库不太一样的地方在于,IndexedDB是用请求-响应方式运作的。

HTML5存储大揭秘:IndexedDB VS Web SQL Database,谁更强大?

咱要玩IndexedDB的话,得先用indexedDB.open()这招儿开门见山。它会给你一个叫做IDBOpenDBRequest的玩意儿,不能直接访问数据库。但是别担心,有了这个东西,你就能像按图索骥一样知道怎么去拿到那个数据库!就是有点慢毕竟是异步处理。所以,得先在回调函数里头处理好这事,等到数据库对象真正弄好了再来侃大山似的处理数据。这样才能保证数据准确无误。

HTML5存储大揭秘:IndexedDB VS Web SQL Database,谁更强大?

创建和打开IndexedDB数据库

function openDB (name) {            
var request=window.indexedDB.open(name);
            request.onerror=function(e){
                console.log('OPen Error!');
            };
            request.onsuccess=function(e){
                myDB.db=e.target.result;
            };
        }        var myDB={
            name:'test',
            version:1,
            db:null
        };
        openDB(myDB.name);

用 IndexedDB.open()就能搞出或打开个 INDEXEDDB(昵称就是IDB)数据库~当我们嫩芽儿似的往里塞第二个备用参数,比如数据库版本号时,如果跟当前的数据库版本对不上眼的话,就会触动onupgradeneeded大戏也就不能硬掰着去打开比咱家低级的数据库!

看完OK了,创建或开启数据库后,就得搞个东西处理它。比如,在搞定回调函数后,把数据库那啥(名字忘了)丢给自定义myDB对象里,这样后面找起来方便些。

function openDB (name,version) {            
var version=version || 1;            
var request=window.indexedDB.open(name,version);
            request.onerror=function(e){
                console.log(e.currentTarget.error.message);
            };
            request.onsuccess=function(e){
                myDB.db=e.target.result;
            };
            request.onupgradeneeded=function(e){
                console.log('DB version changed to '+version);
            };
        }        var myDB={
            name:'test',
            version:3,
            db:null
        };
        openDB(myDB.name,myDB.version);

数据操作与事务处理

function closeDB(db){
            db.close();
        }

想往IndexedDB里存东西?先得搞个object store(仓库)呗!用createObjectStore这个办法就能搞定了,接着定好你的仓库名还有键的种类就成了。别忘了,干什么都得在事务里进行,还得指明要动哪个仓库!

function deleteDB(name){
            indexedDB.deleteDatabase(name);
        }

搞定了Transaction中的对象存储,接下来就可以往里面塞数据。用put能改数据,只要名字一样它会自己换掉;要是名字没见过,那就是新添的记录。想要找哪个数据?用get方法根据名字就能找到!

var myDB={
            name:'test',
            version:3,
            db:null
        };
        openDB(myDB.name,myDB.version);
        setTimeout(function(){
            closeDB(myDB.db);
            deleteDB(myDB.name);
        },500);

删除和更新数据

除了加数据之外,咱们还能动动数据,比如更新或删掉一些记录。想更新哪个记录,就用”put”这个方法,它就能帮你搞定了。要是想把某个store给干掉,那就试试”deleteObjectStore”。只要在升级需要的时候调一下这个函数,保证删除得妥妥的!

每次关掉IndexedDB时,你会看到onclose回调函数被调用,这就是处理背后关库操作的地方。再有,每个新添加的记录里都可以指定其中某个字段当钥匙(keyPath)用。

var transaction=db.transaction([students','taecher']);  //打开一个事务,使用students 和teacher object store
var objectStore=transaction.objectStore('students'); //获取students object store

总结与展望

哎呦,看完这篇文章,咱们对HTML5的对象储存解决方案IndexedDB可是有了深度解析!还学到了创建数据库、启动数据库、加入新东西、修改现有、减掉无用等等实用操作。可见,这个由现代浏览器自带的IndexedDB,在做前端开发时可是挺关键的

说白了,IndexedDB会随Web技术的进步而变得越来越好用,所以得好好学学这些新技能!希望这篇文章能帮你更深入地了解HTML5本地存储技术,将来用起来就66哒!

function openDB (name,version) {            
var version=version || 1;            
var request=window.indexedDB.open(name,version);
            request.onerror=function(e){
                console.log(e.currentTarget.error.message);
            };
            request.onsuccess=function(e){
                myDB.db=e.target.result;
            };
            request.onupgradeneeded=function(e){                
            var db=e.target.result;                
            if(!db.objectStoreNames.contains('students')){
                    db.createObjectStore('students',{keyPath:"id"});
                }
                console.log('DB version changed to '+version);
            };
        }

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

评论0

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