封装indexDB处理方法,重写为localStorage类似形式

embedded/2024/12/22 17:08:08/

indexDB简易化使用

    • 一:场景 - 客户端数据持久化
    • 二:IndexedDBStorage类的创建
    • 三:使用方法

一:场景 - 客户端数据持久化

我的场景:资源超出localStorage最大存储容量,资源通过后台获取响应时间较长

二:IndexedDBStorage类的创建

javascript">class IndexedDBStorage {constructor(dbName, storeName, version = 1) {this.dbName = dbName; // 数据库名称this.storeName = storeName; // 对象存储名称this.db = null; // 数据库实例// 打开或创建数据库const request = indexedDB.open(dbName, version);request.onupgradeneeded = (event) => {const db = event.target.result;if (!db.objectStoreNames.contains(storeName)) {const store = db.createObjectStore(storeName, { keyPath: "id", autoIncrement: true });store.createIndex("name", "name", { unique: true }); // 创建 name 索引}};request.onsuccess = (event) => {this.db = event.target.result;console.log("数据库初始化成功");};request.onerror = (event) => {console.error("数据库初始化失败", event);};}// 存储数据(更新或插入)setItem(name, value) {if (!this.db) {console.error("数据库未初始化");return;}const transaction = this.db.transaction([this.storeName], "readwrite");const store = transaction.objectStore(this.storeName);const index = store.index("name"); // 获取 name 索引// 先查找是否存在相同 name 的数据const getRequest = index.get(name);getRequest.onsuccess = () => {const existingData = getRequest.result;if (existingData) {// 如果存在,更新数据const updateRequest = store.put({ id: existingData.id, name, value });updateRequest.onsuccess = () => {console.log("数据更新成功");};updateRequest.onerror = (event) => {console.error("数据更新失败", event);};} else {// 如果不存在,插入新数据const addRequest = store.add({ name, value });addRequest.onsuccess = () => {console.log("数据插入成功");};addRequest.onerror = (event) => {console.error("数据插入失败", event);};}};getRequest.onerror = (event) => {console.error("查找数据失败", event);};}// 获取数据getItem(name) {if (!this.db) {console.error("数据库未初始化");return;}return new Promise((resolve, reject) => {const transaction = this.db.transaction([this.storeName], "readonly"); // 创建只读事务const store = transaction.objectStore(this.storeName); // 获取对象存储const index = store.index("name"); // 获取 name 索引const request = index.get(name); // 通过 name 查找数据request.onsuccess = () => {if (request.result) {resolve(request.result.value); // 返回找到的数据} else {resolve(null); // 未找到数据}};request.onerror = (event) => {reject(event); // 捕获错误并返回};});}// 删除数据removeItem(name) {if (!this.db) {console.error("数据库未初始化");return;}const transaction = this.db.transaction([this.storeName], "readwrite");const store = transaction.objectStore(this.storeName);const index = store.index("name");const request = index.openCursor(IDBKeyRange.only(name));request.onsuccess = (event) => {const cursor = event.target.result;if (cursor) {cursor.delete();console.log("数据删除成功");} else {console.log("未找到对应的数据");}};request.onerror = (event) => {console.error("数据删除失败", event);};}// 清空对象存储clear() {if (!this.db) {console.error("数据库未初始化");return;}const transaction = this.db.transaction([this.storeName], "readwrite");const store = transaction.objectStore(this.storeName);const request = store.clear();request.onsuccess = () => {console.log("对象存储清空成功");};request.onerror = (event) => {console.error("对象存储清空失败", event);};}
}export default IndexedDBStorage

三:使用方法

javascript">this.myOutside = new IndexedDBStorage("MyDatabase", "MyObjectStore");  // 数据库名称,数据表名
//getItem
this.myOutside.getItem("name").then((value) => {})
//setItem
this.myOutside.setItem("name", 'yd');
//removeItem
this.myOutside.removeItem("name");
//clear
this.myOutside.clear();

http://www.ppmy.cn/embedded/147873.html

相关文章

后端接口返回文件流,前端下载(java+vue)

各位小伙伴们大家好,欢迎来到这个小扎扎的专栏 总结 | 提效 | 拓展,在这个系列专栏中记录了博主在学习期间总结的大块知识点,以及日常工作中遇到的各种技术点 ┗|`O′|┛ ?? 内容速览 后端获取前端下载 本身前端是可以直接通过文…

基于SpringBoot+Vue的中药材进存销管理系统

系统展示 系统背景 在中医药行业,中药材的进存销管理是一项至关重要的工作。然而,传统的管理方式往往依赖于纸质记录和人工操作,这不仅效率低下,而且容易出现错误。随着信息化技术的不断发展,越来越多的企业开始寻求通…

宠物管理系统(2):utils

这篇文章介绍写这个系统中使用到的工具类。 验证码生成器 package com.wzb.utils.captcha;import java.util.Random;public class CaptchaUtils {// 定义包含数字和大小写字母的字符集private static final String CHAR_POOL "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn…

java版Spring Cloud+Mybatis+Oauth2+分布式+微服务+实现工程管理系统

鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展,企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,公司对内部工程管…

SpringBoot 接口API对数据格式的验证 数据验证 格式验证 Validation

依赖 <!--数据验证--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency>参数验证 直接在实体类中定义 Data public class User {Pattern(regexp…

道路运输企业安全生产管理人员安全考核试题

道路运输企业安全生产管理人员安全考核试题 一、单选题 题干&#xff1a;在公交车行驶过程中&#xff0c;乘客王某因与驾驶员发生矛盾&#xff0c;遂殴打驾驶员并抢夺方向盘&#xff0c;造成其他乘客受轻微伤&#xff0c;依照《中华人民共和国刑法》的规定&#xff0c;王某触…

vue应用移动端访问缓慢问题

由于移动端的javascript处理引擎相对于pc端在处理复杂计算或大量数据时&#xff0c;可能会出现性能瓶颈&#xff0c;从而导致访问页面缓慢严重还会出现白屏情况&#xff0c;所以针对此问题做以下处理提升性能。 1、打包时压缩js文件 安装TerserPlugin插件 npm install terser…

中国人工智能学会技术白皮书

中国人工智能学会的技术白皮书具有多方面的重要作用&#xff0c;是极具权威性和价值的参考资料。 看看编委会和编写组的阵容&#xff0c;还是很让人觉得靠谱的 如何下载这份资料呢&#xff1f;下面跟着步骤来吧 步骤一&#xff1a;进入中国智能学会官网。百度搜索“中国智能学…