所有分类
  • 所有分类
  • 后端开发
使用 IndexedDB 数据库的注意事项及实战案例解析

使用 IndexedDB 数据库的注意事项及实战案例解析

这次给大家带来indexeddb数据库的使用详解,使用indexeddb数据库的注意事项有哪些,下面就是实战案例,一起来看一下。数据库,它可以存储大量的数据。方法来连接数据库,该方法接收两个参数,第一个是数据库名,第二个是数据库版本号。事件

嗨小伙伴们,索引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);

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

评论0

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