使用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

Neeshck-Z-lmage_LYX_v2从零开始:新手3步完成本地AI绘画工具搭建

Neeshck-Z-lmage_LYX_v2从零开始:新手3步完成本地AI绘画工具搭建 想自己动手搭建一个AI绘画工具,但又担心过程太复杂、电脑配置不够?今天,我就带你用Neeshck-Z-lmage_LYX_v2这个轻量级工具,三步搞定本地AI绘画的部署。整个过程就像搭积木一样简单,不需要联网,不需要高深的技术知识,更不需要昂贵的显卡。 这个工具是基于国产的Z-Image模型开发的,最大的特点就是“轻”和“快”。它把复杂的模型加载、参数调节都封装好了,你只需要在浏览器里点点鼠标、输入文字,就能看到AI生成的画作。无论是想画一个电影感十足的场景,还是生成一张精致的头像,它都能帮你快速实现。 下面,我们就开始这三步搭建之旅。 1. 环境准备:给你的电脑装上“画板” 在开始画画之前,我们得先把“画板”和“颜料”准备好。这一步主要是安装必要的软件环境,别担心,跟着做就行。 1.1 检查你的“画室”条件 首先,

华为人工智能HCIP-AI Solution Architect H13-323题库(26年最新,带解析知识点)

华为人工智能HCIP-AI Solution Architect H13-323题库(26年最新,带解析知识点)

刚考完HCIP-AI Solution Architect H13-323,整理的题库给大家参考学习。完整版题库已经发在题主小程序上了,需要的同学可以去绿泡泡上找“题主”小程序。 以下哪个不是MindSpore核心架构的特点? A、自动微分 B、自动调优 C、自动编码 D、自动并行 答案:C 解析:MindSpore核心架构以自动微分、自动并行和自动调优为主要特点,支持端边云全场景的AI开发。“自动编码”并非其核心架构的特点。 标签:MindSpore,自动微分,自动并行,自动调优 如果你想使用 Hugging Face Transformers 库中的预训练模型进行 DeepSpeed 训练,请对以下步骤进行排序,正确的是哪一项? 步骤: 1. 创建一个TrainingArguments对象,并在其中指定包括DeepSpeed配置在内的训练参数。 2. 创建Trainer对象。 3. 加载预训练模型。 4. 传递模型和训练参数,

具身智能演示深解---从盲行到跑酷:深度视觉如何赋予足式机器人极限运动能力

具身智能演示深解---从盲行到跑酷:深度视觉如何赋予足式机器人极限运动能力

1. 引言:为什么需要深度视觉 在过去数年间,基于强化学习的足式机器人运动控制取得了长足进展。早期的工作——以ETH的legged_gym框架和IsaacGym并行训练环境为代表——已经证明,仅依靠本体感知(关节编码器、IMU等)就能训练出在连续复杂地形上鲁棒行走的策略。这类方法通常被称为"Blind Locomotion",即机器人不借助任何外部视觉传感器,完全依赖对自身状态的感知来适应地形变化。DreamWaQ(KAIST, ICRA 2023)等工作进一步证明,通过非对称Actor-Critic框架配合隐式地形估计,四足机器人甚至可以在户外多样地形上实现长距离鲁棒行走。 然而,Blind Locomotion存在一个根本性的局限:机器人无法预知前方地形的具体形态。当面对跳箱、深沟、高台阶等需要提前规划动量和轨迹的极限地形时,纯本体感知的策略往往力不从心。跑酷(Parkour)场景要求机器人在接近障碍物之前就判断出障碍物的高度、宽度和距离,并据此调整步态、积累动量、选择起跳时机。这些决策必须依赖对前方环境的主动感知——深度视觉由此成为从"能走"到"能跑酷&

242-267 GHz双基地超外差雷达系统:面向精密太赫兹传感与成像的65nm CMOS实现——论文阅读

242-267 GHz双基地超外差雷达系统:面向精密太赫兹传感与成像的65nm CMOS实现——论文阅读

242-267 GHz双基地超外差雷达系统:面向精密太赫兹传感与成像的65nm CMOS实现 A. V. Muppala et al., “A 242-267 GHz Bistatic Superheterodyne Radar System for Precision Terahertz Sensing and Imaging in 65-nm CMOS,” in IEEE Transactions on Microwave Theory and Techniques, vol. 73, no. 8, pp. 4999-5011, Aug. 2025, doi: 10.1109/TMTT.2025.3548036. 引言与研究背景 太赫兹(THz)