IndexedDB 是浏览器内置支持事务的 NoSQL 数据库,用于 Web 应用持久化存储大量结构化数据,尤其适合离线场景;其 CRUD 操作需按“打开数据库→创建/获取对象仓库→事务中执行”流程进行,关键包括 onupgradeneeded 初始化、put()/add() 增改、get()/openCursor() 查询、delete()/clear() 删除,并推荐 Promise 封装与通用工具封装以提升可维护性。
IndexedDB 是浏览器内置的、支持事务的 NoSQL 数据库,适合在 Web 应用中持久化存储大量结构化数据,尤其适用于离线场景。实现 CRUD(增删改查)操作的关键在于:打开数据库 → 创建/获取对象仓库(Object Store)→ 在事务中执行操作。下面分步骤说明关键操作和实用写法。
首次打开时需监听 onupgradeneeded 事件来初始化结构;后续打开直接复用已有结构。
示例代码逻辑:
window.indexedDB.open("myDB", 1) 打开或新建数据库(版本号为 1)onupgradeneeded 中检查 event.oldVersion,决定是否新建或升级对象仓库db.createObjectStore("users", { keyPath: "id" }) 创建主键为 id 的仓库store.createIndex("email", "email", { unique: true }) 添加索引便于按字段查询插入新记录或覆盖同主键记录都用 add() 或 put()。区别在于:add() 遇到重复主键会报错;put() 自动覆盖,更常用。
操作必须在事务中进行:
db.transaction(["users"], "readwrite") 获取读写事务transaction.objectStore("users").put({ id: 1, name: "张三", email: "[email protected]" })
request.onsuccess 确认写入完成,request.onerror 捕获失败(如主键冲突、存储空间不足)根据查询方式不同,有几种常用方法:
get(key),例如 store.get(1) 获取 id=1 的用户store.index("email").get("[email protected]")
openCursor() 或 getAll()(注意 getAll() 不支持条件过滤,适合小量数据)IDBKeyRange,例如 IDBKeyRange.bound(10, 20) 查询 id 在 10–20 之间的记录删除同样依赖事务,支持按主键或按范围清除:
store.delete(1)
store.delete(IDBKeyRange.bound("2024-01-01", "2024-12-31"))(适用于日期主键)store.clear(),但需谨慎使用onsuccess 确认结果实际开发中建议封装通用方法(如 dbUtil.add()、dbUtil.findByIndex()),统一处理事务生命周期和错误提示。注意 IndexedDB 是异步 API,避免嵌套过深,可配合 Promise 封装提升可读性。离线时只要数据已存入,页面刷新后依然可用;上线后可结合网络状态同步到服务端。
Tplink企业版路由器WiFi名称的默认设置介绍(Tplink企业版路由器WiFi名称的默认设置是什么)
Tplink路由器灯常亮无法上网的原因分析(如何解决Tplink路由器灯常亮无法上网的问题)
Tplink千兆企业级路由器自动重启的作用和优势介绍(如何设置Tplink千兆企业级路由器自动重启功能)
一根天线的tplink路由器有哪些(一根天线的Tplink路由器的特点和优势介绍)
tplink路由器外网访问不了nas(Tplink路由器外网访问NAS的原因分析)
Tplink无法搜到路由器的原因分析(如何解决Tplink无法搜到路由器的问题)