使用Dexie操作前端数据库IndexedDB 教程

使用Dexie操作前端数据库IndexedDB 教程

Dexie.js 是对前端本地数据库 IndexedDB 的 API 进行封装的轻量级库,它简化了 IndexedDB 复杂的原生操作,提供了更简洁、直观的语法,便于开发者快速实现前端本地数据的持久化存储。

一、为什么选择 IndexedDB?

前端常见的本地存储方案(Cookie、LocalStorage、SessionStorage)均存在存储容量限制,无法满足大数据量的存储需求。IndexedDB 作为浏览器原生的本地数据库,具备大容量存储优势,具体对比如下:

  • Cookie:存储容量不超过 4KB,主要用于存储会话标识等少量信息;
  • LocalStorage:存储容量介于 2.5MB ~ 10MB 之间,仅支持字符串存储;
  • SessionStorage:存储容量与 LocalStorage 相当,但仅在当前会话有效,页面关闭后数据丢失;
  • IndexedDB:存储容量不低于 250MB,支持占用本地磁盘空间的 50%,可存储大量结构化数据,支持事务、索引等数据库核心特性。

二、安装 Dexie

使用包管理器(pnpm、npm、yarn)快速安装 Dexie:

pnpmadd dexie 

三、核心操作步骤

3.1 创建数据库(Database)

通过 new Dexie() 创建数据库实例,指定数据库名称。若数据库不存在则自动创建,若已存在则直接打开。

3.2 创建表(Table)

通过 version().stores() 定义数据库版本及表结构,包括主键、索引等信息。表结构定义需与数据库版本绑定,版本升级时可同步更新表结构。

importtype{ Table }from'dexie';// 定义表结构:版本1中创建 "users" 表 db.version(1).stores({ users:'++id, userName',// ++id 表示自增长主键;userName 表示为该字段创建索引});// 获取 "users" 表实例,用于后续数据操作let users: Table<StoreUserData>; users = db.table('users');

说明:

  • ++id:自增长整数主键,插入数据时无需手动指定 id,数据库会自动生成;
  • userName:为该字段创建索引,可提升按 userName 查询的效率。

3.3 数据操作:增删改查(CRUD)

3.3.1 新增数据(增)

使用 add() 方法插入单条数据,主键(id)会自动生成。

// 插入一条用户数据,无需指定 id db.users.add({ userName:'zhangsan'});
3.3.2 修改/新增数据(改)

使用 put() 方法实现“插入或更新”(upsert)功能:若数据不存在(根据主键判断)则新增,若已存在则覆盖修改。

// 若 id=1 的数据存在则修改 userName,不存在则新增该数据 db.users.put({ id:1, userName:'zhangsan'});

3.3.3 删除数据(删)

使用 delete() 方法根据主键删除单条数据。

3.3.4 查询数据(查)

Dexie 提供了丰富的查询方法,支持按主键查询、条件查询、排序、分页等场景:

// 1. 按主键查询单条数据 db.users.get(1).then(res =>console.log('主键id=1的用户:', res));// 2. 条件查询(两种常用方式)// 方式1:按字段条件查询 db.users.where('userName').equals('zhangsan').toArray().then(res =>console.log('用户名为zhangsan的用户:', res));// 方式2:按对象匹配条件查询 db.users.where({ userName:'zhangsan'}).toArray().then(res =>console.log('用户名为zhangsan的用户:', res));// 3. 查询第一条数据(按id升序) db.users.orderBy('id').first().then(res =>console.log('第一条用户数据:', res));// 4. 查询最后一条数据(按id升序) db.users.orderBy('id').last().then(res =>console.log('最后一条用户数据:', res));// 5. 查询表中数据总数 db.users.count().then(count =>console.log('用户总数:', count));// 6. 分页查询(按id倒序,查询前100条数据) db.users.orderBy('id').reverse()// 倒序排列(默认升序).offset(0)// 偏移量,从第0条开始(即跳过前0条).limit(100)// 限制查询数量,最多返回100条.toArray().then(res =>console.log('分页查询结果:', res));

四、TypeScript 封装优化

通过类封装数据库操作,结合 TypeScript 类型定义,提升代码可维护性和类型安全性:

importtype{ Table }from'dexie';import Dexie from'dexie';// 定义用户数据类型接口,约束数据结构exportinterfaceStoreUserData{ id?:number;// 主键可选,插入时自动生成 userName:string;// 用户名,必传字段}// 封装数据库类exportclassUserDataBaseextendsDexie{// 定义表实例,指定数据类型 users!: Table<StoreUserData>;// 数据库版本private localVersions =1;constructor(){// 调用父类构造函数,指定数据库名称super('UserDataBase');// 初始化数据库版本和表结构this.version(this.localVersions).stores({ users:'++id, userName'// 与前文表结构一致});// 赋值表实例this.users =this.table('users');}}// 创建数据库实例,供全局使用exportconst usersDB =newUserDataBase();

五、查看 IndexedDB 数据

可通过浏览器开发者工具直观查看和操作 IndexedDB 中的数据,步骤如下:

  1. 打开浏览器(Chrome/Firefox/Edge 等)的开发者工具(快捷键 F12 或 Ctrl+Shift+I);
  2. 切换到「应用」(Application)面板;
  3. 在左侧导航栏中找到「存储」-「IndexedDB」;
  4. 展开对应数据库(如 UserDataBase)和表(如 users),即可查看表中数据,支持新增、修改、删除等操作。

六、参考资料

Read more

揭秘!AI应用架构师眼中的智能Web3应用开发框架精髓

揭秘!AI应用架构师眼中的智能Web3应用开发框架精髓 关键词:智能Web3应用, AI与区块链融合, 去中心化AI架构, 智能合约开发, Web3开发框架, AI模型链上集成, 去中心化应用(DApp)设计 摘要:当人工智能(AI)的"智慧大脑"遇上Web3的"去中心化灵魂",会碰撞出怎样的创新火花?本文将以AI应用架构师的第一视角,深入剖析智能Web3应用开发框架的核心精髓。我们将从"传统互联网到Web3的进化史"讲起,用生活类比揭开Web3与AI融合的神秘面纱,系统讲解智能Web3应用的"五脏六腑"架构设计、AI模型与区块链交互的"对话语言"、以及实战开发中的"避坑指南"。无论你是Web3开发者、AI工程师,还是对下一代互联网好奇的技术爱好者,这篇文章都将带你透过架构师的眼睛,看到智能Web3应用开发的全景蓝图—

【机器人】ROS2 功能包创建与 CMake 编译链路探秘

【机器人】ROS2 功能包创建与 CMake 编译链路探秘

🔥大奇个人主页 :https://blog.ZEEKLOG.net/m0_75192474?type=blog ⚡本文所属专栏:https://blog.ZEEKLOG.net/m0_75192474/category_13131150.html ros2 pkg create 是 ROS2(Robot Operating System 2)中用于快速初始化功能包的官方核心命令行工具。其核心作用是自动生成功能包所需的完整目录结构、配置文件及可选示例节点,避免手动创建文件和配置的繁琐操作,大幅提升开发效率。 该命令支持两种主流构建类型(C++/Python),可直接指定依赖包、维护者信息、开源协议等关键配置,生成的功能包完全符合 ROS2 官方规范,可直接用于编译、运行及后续开发扩展 ⏰ 创建工作空间 首先需要再主目录中新建一个文件夹,带src目录 mkdir-p test_ws/

NWPU VHR-10数据集 无人机遥感目标检测数据集 飞机 储罐 棒球场 网球场篮球场 港口车辆桥梁检测 遥感图像中的地理空间目标检测

NWPU VHR-10数据集 无人机遥感目标检测数据集 飞机 储罐 棒球场 网球场篮球场 港口车辆桥梁检测 遥感图像中的地理空间目标检测

NWPU VHR-10数据集 遥感数据集 NWPU VHR-10数据集是 10个类别地理空间目标检测的挑战性数据集,共650张图片。 YOLO和COCO格式 数据集按默认划分比例:390张训练集、130张验证集、130张测试集。 手动标注了757架飞机、302艘船只、655个储罐、390个棒球场、524个网球场、159个篮球场、163个田径场、224个港口、124座桥梁和598辆车辆。 📊 一、数据集总体信息 项目描述数据集名称NWPU VHR-10(Northwestern Polytechnical University Very High Resolution 10-class Dataset)任务类型遥感图像中的地理空间目标检测(Object Detection in Remote Sensing Images)图像总数650 张(均为高分辨率遥感图像,源自 Google Earth 等平台)图像分辨率约 600×600

Clawdbot整合Qwen3:32B的低代码工作流:拖拽式Agent编排与条件分支

Clawdbot整合Qwen3:32B的低代码工作流:拖拽式Agent编排与条件分支 1. 为什么需要这个工作流:从“写代码”到“搭积木” 你有没有遇到过这样的情况:想让大模型帮自己自动处理一批客户咨询,但每次都要改Python脚本、调API参数、写if-else逻辑,改完还要测试、部署、查日志?或者想让AI根据用户提问类型自动走不同流程——比如问价格走报价分支,问售后走工单分支,问教程走知识库分支——可一想到要写状态机、维护路由表、处理异常跳转,就直接放弃了? Clawdbot + Qwen3:32B 的这套低代码工作流,就是为解决这类问题而生的。它不让你写一行后端逻辑,也不要求你懂FastAPI或LangChain内部机制。你只需要在界面上拖拽几个模块,连几条线,设几个判断条件,就能把一个320亿参数的大模型变成真正能干活的智能体(Agent)。 这不是概念演示,而是已经跑在生产环境里的真实配置:Qwen3:32B 模型私有部署在本地服务器,通过 Ollama 统一提供 API;Clawdbot 作为前端编排层,不碰模型推理,只负责“