前端数据库 IndexedDB 详解:构建强大的离线Web应用

该文章已生成可运行项目,

引言:为什么需要前端数据库?

在现代Web开发中,我们经常需要处理大量结构化数据。传统的localStoragesessionStorage虽然简单易用,但只能存储少量字符串数据,无法满足复杂应用的需求。IndexedDB应运而生——这是一个功能强大的浏览器内置数据库,支持存储大量结构化数据,提供索引、事务等高级功能,是实现离线应用、缓存机制和复杂数据处理的理想选择。

IndexedDB核心概念解析

1. 数据库(Database)

  • 每个源(协议+域名+端口)可以创建多个数据库
  • 每个数据库包含多个对象存储(类似于SQL中的表)

2. 对象存储(Object Store)

  • 存储键值对集合的主要容器
  • 键可以是路径、自增数字或自定义键生成器
  • 值可以是任何结构化可克隆对象

3. 索引(Index)

  • 允许高效查询对象存储中的数据
  • 可以基于对象属性创建多个索引
  • 支持唯一索引约束

4. 事务(Transaction)

  • 所有操作都在事务中执行
  • 三种模式:只读(readonly)、读写(readwrite)和版本变更(versionchange)
  • 提供原子性保证(全部成功或全部失败)

5. 游标(Cursor)

  • 用于遍历对象存储或索引中的记录
  • 支持方向控制(前进/后退)和范围查询

完整代码示例:实现一个联系人管理器

1. 初始化数据库

// 打开或创建数据库
const dbName = 'ContactDB';
const dbVersion = 1;

const request = indexedDB.open(dbName, dbVersion);

request.onerror = (event) => {
   
   
  console.error('数据库打开失败:', event.target.error);
};

request.onupgradeneeded = (event) => {
   
   
  const db = event.target.result;
  
  // 创建对象存储(如果不存在)
  if (!db.objectStoreNames.contains('contacts')) {
   
   
    const store = db.createObjectStore('contacts', {
   
   
      keyPath: 'id',
      autoIncrement: true
    });
    
    // 创建索引
    store.createIndex('name', 'name', {
   
    unique: false });
    store.createIndex('email', 'email', {
   
    unique: true });
    store.createIndex('phone', 'phone', {
   
    unique: false });
    store.createIndex('group', 'group', {
   
    unique: false });
  }
};

request.onsuccess = (event) => {
   
   
  const db = event.target.result;
  console.log('数据库成功打开');
  // 存储数据库引用供后续使用
  window.contactDB = db;
};

2. 添加联系人

function addContact(contact) {
   
   
  return new 
本文章已经生成可运行项目
评论 84
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值