嗨小伙伴们,索引Db,是不是看着就高端?这个家伙可以实现在网页上存东西。别被”DB”吓到了,虽然它有点冷酷,但其实特别好玩!
var request = indexedDB.open('dbName', 1); // 打开 dbName 数据库 request.onerror = function(e){ // 监听连接数据库失败时执行 console.log('连接数据库失败'); } request.onsuccess = function(e){ // 监听连接数据库成功时执行 console.log('连接数据库成功'); }
一个网站可以有多个indexedDB数据库
咱们,来聊聊那个“一个站能搞好多indexedDB数据库”的话题。打个比方,你家就是一个大房子,里面可能有好几个储物柜,一个装玩具,另一个藏书,是这么回事儿不?indexedDB跟这差不多,你在同一个网站也能建好些数据库,每一个都有自个的名字,跟你的储物柜一样,每个柜子都得编个号,名字还不能重复。
indexedDB.open方法:连接数据库的钥匙
var request = indexedDB.open('dbName', 2); // 更新版本,打开版本为2的数据库 // ... request.onupgradeneeded = function(e){ console.log('新数据库版本号为=' + e.newVersion); }
想要开储物柜,没钥匙可不行,对?在indexedDB里面,这把关键的钥匙就是indexedDB.open方法。只需要给它俩参数,一是你家数据的姓名,另一个是它对应的版本号。这样我就能知道你家具体在哪儿,进到哪个房间去找你藏起来的宝贝了。这个方法会给你一个神秘的IDBOpenDBRequest对象,就像你跟我说“我要开门啦”,听着都带劲!
onupgradeneeded事件:更新数据库的信号
也许你会疑问,如果想要改变储物柜的布局该咋办?别担心,indexedDB这家伙会帮你处理滴!当储物柜需要升级的时候,它内部有个专门的传感器会触发一个叫onupgradeneeded的事件。这时候,你就可以按照自己喜好去调整储物柜的布局!
var request = indexedDB.open('dbName', 2); // ... request.onsuccess = function(e){ console.log('连接数据库成功'); var db = e.target.result; db.close(); console.log('数据库已关闭'); }
IDBOpenDBRequest对象:不只是开柜子
indexedDB.deleteDatabase('dbName'); console.log('数据库已删除');
你好不容易拿到那个IDBOpenDBRequest,别忘了人家还能关柜子!就像我们平时用完了储物柜也得记得把门关紧,要不然里面的东西可能会乱套。
对象仓库:indexedDB的核心
IDB跟那些常见的表格不太一样,它是用一个个存储箱子(也就是我们说的“仓库”)来管理数据。这个仓库就好比你家的储藏室,里面整整齐齐地码放着很多小盒子(即“对象”),每一个小盒子都可以用来装各种信息,比如说你的名字,住址之类的。
var request = indexedDB.open('dbName', 3); // ... request.onupgradeneeded = function(e){ var db = e.target.result; var store = db.createObjectStore('Users', {keyPath: 'userId', autoIncrement: false}); console.log('创建对象仓库成功'); }
创建索引:让找东西变得简单
在IndexedDB里,就是给每条数据打个标签,这样你就能更快地找到想要的信息。
var request = indexedDB.open('dbName', 4); // ... request.onupgradeneeded = function(e){ var db = e.target.result; var store = db.createObjectStore('newUsers', {keyPath: 'userId', autoIncrement: false}); var idx = store.createIndex('usernameIndex','userName',{unique: false}) console.log('创建索引成功'); }
store.createIndex方法:给盒子打标签
想要给盒子贴上标签?那就用store.createIndex这个方法,只要告诉它标签名和盒子里的东西特性就行!举个例子,你可以用用户名来建索引,这样想查找某人信息的时候,一下子就能找到了!
transaction方法:事务管理
在indexedDB里,用transaction方法就能帮你处理事务!就像你打开好多柜子,必须一个个搞定它们,井然有序才行~
var request = indexedDB.open('dbName', 5); // ... request.onupgradeneeded = function(e){ var db = e.target.result; var tx = db.transaction('Users','readonly'); tx.oncomplete = function(e){ console.log('事务结束了'); } tx.onabort = function(e){ console.log('事务被中止了'); } }
add和put方法:存东西的不同方式
存东西时,你可以选“添加”或“放进去”两种方法。它们就像两种保存策略:前者会继续加新东西,没位置了就换个盒;后者则类似替换旧物,无论盒子有多满也没关系。
get方法:取东西的秘诀
你想用GET方法拿到东西?那你得先知道它在哪儿!就像你找储物柜里的东西,总得知道它藏哪儿了。
update方法:更新数据就像整理盒子
var request = indexedDB.open('dbName', 5); // ... request.onsuccess = function(e){ var db = e.target.result; var tx = db.transaction('Users','readwrite'); var store = tx.objectStore('Users'); var value = { 'userId': 1, 'userName': 'linxin', 'age': 24 } var req1 = store.put(value); // 保存数据 var req2 = store.get(1); // 获取索引userId为1的数据 req2.onsuccess = function(){ console.log(this.result.userName); // linxin } var req3 = store.delete(1); // 删除索引为1的数据 req3.onsuccess = function(){ console.log('删除数据成功'); // 删除数据成功 } }
你要是发现盒子里面放的不对劲儿,那直接用update就能搞定!比如你收拾抽屉时,发现某样东西不在原位,那直接把它放在原地不就行?
continue方法:继续探索
找东西时,找到一样还想继续?别急,试试continue。比如找到一个盒子还想看看其他盒里有啥?那就用continue呗。
说的简单点,indexedDB就是个大仓库,用来装各种类型的数据。它还能帮你用各种方法来理顺、处理这些数据。这个东西可不只是个饭碗技术,更大作用在于让你的网站变得更聪明、更厉害。那么有人用indexedDB遇到过好玩儿的事儿吗?评论区分享,记得给文章点个赞哟!
// boundRange 表示主键值从1到10(包含1和10)的集合。 // 如果第三个参数为true,则表示不包含最小键值1,如果第四参数为true,则表示不包含最大键值10,默认都为false var boundRange = IDBKeyRange.bound(1, 10, false, false); // onlyRange 表示由一个主键值的集合。only() 参数则为主键值,整数类型。 var onlyRange = IDBKeyRange.only(1); // lowerRaneg 表示大于等于1的主键值的集合。 // 第二个参数可选,为true则表示不包含最小主键1,false则包含,默认为false var lowerRange = IDBKeyRange.lowerBound(1, false); // upperRange 表示小于等于10的主键值的集合。 // 第二个参数可选,为true则表示不包含最大主键10,false则包含,默认为false var upperRange = IDBKeyRange.upperBound(10, false);
评论0