IndexedDB介绍IndexedDB是一个对象数据库,可以在浏览器中持久化存储结构化数据,为Web应用提供丰富的查询能力。它比WebSQL数据库简单得多,官方标准中关于WebSQL的工作已经停止。与WebStorage相比,IndexedDB的存储空间是无限的、永久的。创建数据库IndexedDB就是根据域名分配独立的空间。可以在一个独立的域名下创建多个数据库。每个数据库可以创建多个对象存储空间(表/对象仓库)。一个对象存储空间可以存储多个对象数据(索引字段)。functionopenDB(){varrequest=indexedDB.open(dbName,dbVer);//数据库存在则打开,数据库不存在则新建request.onsuccess=function(e){}request.onerror=function(e){}//创建一个新的数据库,或者当数据库版本号改变时触发onupgradeneeded事件,执行回调函数request.onupgradeneeded=function(e){}}indexedDB.open方法用于创建一个database,传递两个参数(数据库名称,数据库版本),在新建数据库或更改数据库版本号时调用request.onupgradeneeded方法创建对象存储空间request.onupgradeneeded=function(e){db=e.target.result;//判断是否有这个对象存储的存在if(!db.objectStoreNames.contains('Users')){//如果对象存储不存在,则创建一个新的对象存储(keyPath,primarykey;autoIncrement,是否自增),并返回一个对象(objectStore)varstore=db.createObjectStore('Users',{keyPath:'id',autoIncrement:true});//指定可以索引的字段,是否unique字段是唯一的,可以创建多个索引是否唯一)对IndexedDB的事务(transaction)查询和更新都包含在一个事务(transaction)中,以保证这些操作要么一起成功,要么一起失败。functiondataHandle(data){//创建交易对象varts=db.transaction('Users','readwrite');//通过事务对象获取对象存储varstore=ts.objectStore('Users');//向仓库添加数据varreq=store.put(data);req.onsuccess=function(){}}对仓库store的操作:put()添加数据,参数为要保存的对象,如果数据主键(keypath)已经存在,则更改数据。add()添加数据,参数为要保存的对象,如果相同的数据主键(keypath)已经存在,则保存失败。delete()删除数据,传入参数为目标数据的主键。get()获取数据,传入参数为目标数据的主键。通过游标遍历数据获取对象仓库中范围内的数据varrange=IDBKeyRange.lowerBound(1);//指定游标获取范围varreq=store.openCursor(range);//创建游标dbData=[];req.onsuccess=function(){varcursor=this.result;如果(光标){dbData.push(光标。值);cursor.continue();//循环读取数据直到结束}else{}}IDBKeyRangemain几个方法:IDBKeyRange.bound(n1,n2,false,false);主键范围从n1到n2,第三和第四个参数是是否包括n1或n2IDBKeyRange.only(n);IDBKeyRange.lowerBound(n,false)范围内的主键;主键集大于nIDBKeyRange.upperBound(n,false);主键集查询数据小于n可以查询的数据需要通过store.createIndex()建立索引varstore=ts.objectStore('Users');varindex=store.index("username");//打开数据库索引varrange=IDBKeyRange.only(keyName);//传单键(索引值)获取范围varreq=index.openCursor(range);删除数据库indexedDB.deleteDatabase("数据库名");总结创建数据库、创建对象存储空间、通过事务遍历、添加、查询数据的操作。代码地址Demo地址
