indexDb使用

indexDb是什么?

indexDb是除了cookie,localstorage,sessionstroage外的另一种前端存贮方式。

现有前端存贮比较

image.png

image.png

indexDb特点

  • 无大小限制,适用于前端存贮数据较多场景
  • 存贮结构以对象仓库形式,可以存入任何类型数据,包括js对象,二进制数据
  • 每条数据都有一个独一无二的主键
  • indexDb操作是异步的,不会影响用户其他动作,而localstoreage是同步的
  • indexDb受同源影响,只能访问自身域名下的
  • indexDb默认存贮位置为C:\Users\当 前 的 登 录 用 户\AppData\Local\Google\Chrome\User Data\Default\IndexedDB

indexDb使用

indexDb的增删改查都是通过事务实现的

1判断是否支持indexDb

window.indexedDB = window.indexdeDB || window.mozIndexedDB || window.webkitIndexedDB
if (window.indexedDB) {console.log('浏览器支持indexedDb')
}

2创建indexDb数据库

open会创建or打开数据库

// 创建or打开数据库 open(数据库名,数据库版本号)
const request = window.indexedDB.c('myDb',1);
let db = null;
let db_tb = null;// 数据库创建or打开失败
request.onerror = (error) => {console.log('创建失败',error)
}// 数据库创建or打开成功
request.onsuccess = (res) => {console.log('创建成功', res);db = request.result;
}

3 创建表,主键,索引

一般会在第一次创建数据库或open新版本时创建表

// 数据库升级 首次创建会触发,指定保本号高于当前被持久化的版本号也会触发
equest.onupgradeneeded = (res) => {console.log('升级成功', res);db = request.result;if (!db.objectStoreNames.contains('student')) {db_tb = db.createObjectStore('student', { keyPath: 'id' }) // 创建表,键的选项,指明主键为iddb_tb.createIndex('indexName','name',{unique: false}) // 创建索引, 索引名,创建索引的列,选项 方便查找}}

具体的索引,主键选项
image.png
创建完毕的,表,索引,主键,value
image.png

4 创建事务

// 创建事务,事务操作的对象存贮空间名(表明),事务模式: readonly 只读,readwrite:可读可写,versionchange: 版本升级
let transaction = mdb.transaction(['student'], 'readwrite');// 事务操作处理完成时触发
transaction.oncomplete = (res) => {console.log('执行完毕',res) 
}// 事务操作处理完成时触发
transaction.onerror = (error) => {console.log('报错',error) 
}// 事务中止后触发
transaction.onabort = (error) => {console.log('中止',error) 
}

5 通过事务进行操作

首先通过事务列表获取具体要操作的事务对象

// 获得某个表的具体事务对象
let store = transaction.objectStore('student');

插入数据

let data = {id: '111',name: '李明',age: 12,
}const addRes = store.add(data); // 注意id和name 要和声明主键和索引的字段一样
addRes.onsuccess = (res) => {console.log('插入成功', res)
}addRes.onerror = (error) => {console.log('插入失败', error)
}

获取数据

  • 通过主键获取
// 获取数据通过主键
const getRes = store.get('111');
getRes.onsuccess = (res) => {console.log('获取成功', res)
}getRes.onerror = (error) => {console.log('获取失败', error)
} 
  • 通过索引获取
    // 获取数据通过索引
const getIdxRes = store.index('indexName').get('李四');
getIdxRes.onsuccess = (res) => {console.log('获取成功', res)
}getIdxRes.onerror = (error) => {console.log('获取失败', error)
} 
  • 获取所有
// 获取所有
const getAllRes = store.getAll();getAllRes.onsuccess = (res) => {console.log('获取成功', res)
}getAllRes.onerror = (error) => {console.log('获取失败', error)
} 
  • 获取指定条件
// 获取指定条件索引
const getReRes = store.getAll(IDBKeyRange.upperBound(+new Date()));
getReRes.onsuccess = (res) => {console.log('获取成功', res)
}getReRes.onerror = (error) => {console.log('获取失败', error)
} 

image.png

更新数据

// 更新数据const updateRes = store.put({id: '111',name: "李明",age:10
});updateRes.onsuccess = (res) => {console.log('更新成功', res)
}updateRes.onerror = (error) => {console.log('更新失败', error)
}

删除数据

// 删除数据通过主键const deleteRes = store.delete('111');deleteRes.onsuccess = (res) => {console.log('获取成功', res)
}deleteRes.onerror = (error) => {console.log('获取失败', error)
}

使用的坑

  • indexDb异步操作,任何需要使用上一步操作结果都需要在complete,success回调事件之后再调用
  • 一个事务开启未执行完毕,不能执行另一个事务,可以在事务onComplete回调中监听上一个事务是否执行完毕

参考文档

https://juejin.cn/post/7239259798267904059
https://blog.csdn.net/qq_36823300/article/details/101382736

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/114824.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无重叠区间【贪心算法】

无重叠区间 给定一个区间的集合 intervals ,其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。 class Solution {public int eraseOverlapIntervals(int[][] intervals) {//先排序,按照左边界升序,注…

MySQL 数据库常用命令大全(详细)

文章目录 1. MySQL命令2. MySQL基础命令3. MySQL命令简介4. MySQL常用命令4.1 MySQL准备篇4.1.1 启动和停止MySQL服务4.1.2 修改MySQL账户密码4.1.3 MySQL的登陆和退出4.1.4 查看MySQL版本 4.2 DDL篇(数据定义)4.2.1 查询数据库4.2.2 创建数据库4.2.3 使…

接口自动化测试:mock server之Moco工具

什么是mock server mock:英文可以翻译为模仿的,mock server是我们用来解除依赖(耦合),假装实现的技术,比如说,前端需要使用某些api进行调试,但是服务端并没有开发完成这些api&#…

iOS import包

Frameworks Frameworks 顾名思义就是框架&#xff0c;是第三方打包完成看不到源码&#xff0c;可以直接使用的 在项目中引用方式 OC 引用某一个文件&#xff0c;Frameworks一般会提供一个h文件引用全部其他文件 #import <JLRoutes/JLRoutes.h>swift 引用一个包&#x…

vue使用qrcodejs2生成二维码

目录 概要 构建展示的vue组件qrcode.vue 组件的使用 概要 项目中用到需要展示二维码的样式&#xff0c;想到了qrcode 例如&#xff1a; 前提&#xff1a;安装包 npm install qrcodejs2 --save 构建展示的vue组件qrcode.vue <template><div style"width: …

JVM垃圾回收算法和CMS垃圾收集器

目录 判断一个对象是否死亡&#xff1f; 1、引用计数法 2、可达性分析算法 三色标记 垃圾收集算法 1、分代收集理论 2、垃圾回收算法 标记-清除 标记-复制 标记-整理 CMS&#xff08;Concurrent Mark Sweep&#xff09;收集器 CMS垃圾收集器步骤 CMS垃圾收集器优…

气传导耳机排名,四款市面上热销相当不错的气传导耳机推荐

​在当今快速的生活节奏中&#xff0c;气传导耳机成为了越来越多人的选择。它们以出色的音质和舒适度而广受好评。在本文中&#xff0c;我们将为您推荐四款市面上热销相当不错的气传导耳机&#xff0c;帮助你找到最适合自己的耳机。 推荐一&#xff1a;NANK南卡00压开放式耳机…

视觉化洞察:为什么我们需要数据可视化?

为什么我们需要数据可视化&#xff1f;这个问题在信息时代变得愈发重要。数据&#xff0c;如今已成为生活的一部分&#xff0c;我们每天都在产生大量的数据&#xff0c;从社交媒体到购物记录&#xff0c;从健康数据到工作表现&#xff0c;数据无处不在。然而&#xff0c;数据本…

基于RabbitMQ的模拟消息队列需求文档

文章目录 一、项目背景二、需求分析1.核心概念2.BrokerServer核心组件3.核心API4.交换机类型5.持久化6.网络通信7.消息应答 三、消息队列模块划分 一、项目背景 什么是消息队列&#xff1f; 消息队列就是&#xff0c;基于阻塞队列&#xff0c;封装成一个独立的服务器程序&#…

【Ubuntu】Ubuntu常用软件部署

1.安装jdk1.8 (1).apt方式安装 1).安装 1.在终端中输入以下命令&#xff0c;以更新软件包列表 sudo apt-get update2.在终端中输入以下命令&#xff0c;以安装JDK 1.8 sudo apt-get install openjdk-8-jdk3.将Java 1.8设置为默认版本。在终端中输入以下命令 sudo update-…

【Linux系列】使用虚拟机安装Linux系统

首发博客地址 首发博客地址[1] 系列文章地址[2] 下载虚拟机 请从官网下载&#xff1a; https://customerconnect.vmware.com/en/downloads/info/slug/desktop_end_user_computing/vmware_workstation_player/17_0 如需不限速下载&#xff0c;请关注【程序员朱永胜】并回复 1018…

微芯I/O控制器瞄准工业与嵌入式运算应用

微芯科技(Microchip Technology)日前发布SCH322X系列I/O控制器新品&#xff0c;该系列产品基于工业及嵌入式开发工程师的需求而开发&#xff0c;功能丰富且具高灵活性。新一代I/O控制器系列拥有尺寸更小的包装和更长的产品生命周期&#xff0c;可运用于更多经济型工业及嵌入式开…

Android安卓实战项目(12)—关于身体分析,BMI计算,喝水提醒,食物卡路里计算APP【支持中英文切换】生活助手类APP(源码在文末)

Android安卓实战项目&#xff08;12&#xff09;—关于身体分析&#xff0c;BMI计算&#xff0c;喝水提醒&#xff0c;食物卡路里计算APP【支持中英文切换】生活助手类APP&#xff08;源码在文末&#x1f415;&#x1f415;&#x1f415;&#xff09; 一.项目运行介绍 B站演示…

小兔鲜商03

进入可视区加载数据&#xff1a; 首页有很多模块&#xff0c;如果一次性加载所有数据&#xff0c;很卡&#xff0c;&#xff0c;当移动到要显示的地方&#xff0c;才加载数据 使用 vueuse 库中 useIntersectionObserver方法&#xff0c;&#xff0c; 传入要监听的元素 target …

Spring Boot存在路径遍历漏洞CVE-2021-22118

文章目录 0.前言1.参考文档2.基础介绍1. 影响的版本2. **漏洞利用原理&#xff1a;** 3.解决方案3.1. 方案13.2. 方案23. 方案3 0.前言 背景&#xff1a;Spring Boot存在路径遍历漏洞。CVE-2021-22118: 官方 issue也有对此的记录&#xff0c;感兴趣可以看下 https://github.com…

8.物联网LWIP,简要介绍http(超文本,URL),html(css,ajax),web实现打开灯

一。HTTP详解 1.超文本&#xff1a;&#xff08;HyperText&#xff09; &#xff08;1&#xff09;超文本文件彼此链接&#xff0c;形成网状&#xff08;web&#xff09;&#xff0c;内含有超链接&#xff08;Link&#xff09;与各种媒体元素标记&#xff08;Markup&#xff…

微服务架构七种模式

微服务架构七种模式 目录概述需求&#xff1a; 设计思路实现思路分析 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,challenge Survive.…

1773_把vim的tab键设置为4个空格显示

全部学习汇总&#xff1a; GitHub - GreyZhang/editors_skills: Summary for some common editor skills I used. 有时候自己觉得自己很奇怪&#xff0c;看着Linux的命令窗口就觉得很顺眼。那些花花绿绿的字符以及繁多的方便命令工具&#xff0c;确实是比Windows强不少。不过&a…

大数据时代下的精准营销

在大数据时代&#xff0c;人们的信息越来越透明&#xff0c;留在网络上的各种数据也是企业进行营销的一个重要的生产要素。一直以来&#xff0c;营销的科学性正是因为运用了自然科学中一级互联网中的数据收集手段&#xff0c;严谨的记录、搜集和分析消费者的各项数据和日常生活…

Openlayer系列:利用GeoServer和Openlayer地图显示区域掩模

前言 利用GeoServer和Openlayer地图显示区域掩模 利用GeoServer进行图层发布 Openlayer地图显示区域掩模 对界面地图进行切换&#xff0c;卫星图利用GeoServer&#xff0c;水系等根据geojson文件生成图层&#xff0c;效果如下 卫星图部分代码如下&#xff1a; // 创建卫星图…