Skip to content
On this page

IndexedDBHelper 使用文档

IndexedDBHelper 是一个用于操作 IndexedDB 数据库的 TypeScript 类。它提供了一些基本的数据库操作方法,包括添加、更新、删除和查询数据。

基础用法

创建一个 IndexedDBHelper 实例

ts
const dbHelper = new IndexedDBHelper('dbName', 1, {
  storeConfigs: [
    {
      storeName: 'storeName',
      keyPath: 'id',
      autoIncrement: true,
      indexConfigs: [
        {
          indexName: 'indexName',
          keyPath: 'keyPath',
          options: { unique: false },
        },
      ],
    },
  ],
  upgradeneeded: () => {
    // 自定义数据操作

    // 添加数据表
    db.createObjectStore('test-add');

    // 删除表
    if (db.objectStoreNames.contains('test-delete-db')) {
      db.deleteObjectStore('test-delete-db');
    }
  }
});

添加数据

ts
dbHelper.add('storeName', { id: '1', name: 'name' });

更新数据

ts
dbHelper.update('storeName', { id: '1', name: 'newName' });

删除数据

ts
dbHelper.delete('storeName', '1');

根据 id 获取数据

ts
const data = await dbHelper.get('storeName', '1');
console.log(data);

根据索引获取数据

ts
const data = await dbHelper.getByIndex('storeName', 'indexName', 'indexValue');
console.log(data);

检验数据库连接是否成功

通过 dbPromise 属性的 await 操作来检验数据库连接是否成功。如果数据库连接失败,dbPromise 会抛出错误,您可以通过捕获这个错误来处理数据库连接失败的情况。

ts
try {
    await dbHelper.dbPromise;
    console.log('Database connection successful');
  } catch (error) {
    console.error('Failed to connect to the database:', error);
  }

自定义数据表操作

在创建 IndexedDBHelper 实例时提供 upgradeneeded 方法,来实现自定义的数据表添加和删除操作。使用方式与indexDB的upgradeneeded方法类似

ts
const dbHelper = new IndexedDBHelper('dbName', 2, {
  storeConfigs: [
    {
      storeName: 'storeName',
      keyPath: 'id',
      autoIncrement: true,
      indexConfigs: [
        {
          indexName: 'indexName',
          keyPath: 'keyPath',
          options: { unique: false },
        },
      ],
    },
  ],
  upgradeneeded: () => {
    // 自定义数据操作

    // 添加数据表
    db.createObjectStore('test-add');

    // 删除表
    if (db.objectStoreNames.contains('test-delete-db')) {
      db.deleteObjectStore('test-delete-db');
    }
  }
});

Typescript

ts
// 导入 IndexedDBHelper 类
import { IndexedDBHelper } from './index.tsx';

// 定义一个类型来描述你的数据
interface MyData {
  "myStore":{
    id: string;
    name: string;
  }
}

// 创建 IndexedDBHelper 实例
const dbHelper = new IndexedDBHelper<MyData>('myDb', 1, {
  storeConfigs: [
    {
      storeName: 'myStore',
      keyPath: 'id',
      autoIncrement: true,
      indexConfigs: [
        {
          indexName: 'nameIndex',
          keyPath: 'name',
          options: { unique: false },
        },
      ],
    },
  ]
});

// 添加数据
dbHelper.add('myStore', { id: '1', name: 'John' });

// 更新数据
dbHelper.update('myStore', { id: '1', name: 'Jane' });

// 删除数据
dbHelper.delete('myStore', '1');

// 获取数据
dbHelper.get('myStore', '1').then(data => console.log(data));

// 通过索引获取数据
dbHelper.getByIndex('myStore', 'nameIndex', 'John').then(data => console.log(data));

参数

IndexedDBHelper

参数说明类型
dbName数据库名称string
version数据库版本number
options数据库表配置IndexedDBHelperOptions

IndexedDBHelperOptions

参数说明类型
storeConfigs数据库表配置数组StoreConfig<T, keyof T>[]
upgradeneeded数据库升级时的回调函数,与indexDB的upgradeneeded方法类似
参数为数据库对象、旧版本和新版本
(db: IDBDatabase, oldVersion: number, newVersion: number / null) => void
blocked数据库被阻止打开时的回调函数,与indexDB的blocked方法类似,参数为旧版本、新版本和事件对象(oldVersion: number, newVersion: number / null, event: IDBVersionChangeEvent) => void

StoreConfig 数据库存储的配置

字段类型描述
storeNameExtract<U, string>存储名称
keyPathstring / string[]键路径
autoIncrementboolean是否自动增加键值
indexConfigsIndexConfig[]索引配置数组

IndexConfig 数据库索引的配置

字段类型描述
indexNamestring索引名称
keyPathstring / string[]键路径
optionsIDBIndexParameters可选参数

属性

  • dbName

    类型:string

    描述:数据库的名称。

  • version

    类型:number

    描述:数据库的版本号。如果版本号高于当前数据库的版本号,将触发 upgradeneeded 事件。

  • dbPromise

    类型:Promise<IDBDatabase>

    描述:打开数据库的 Promise 对象。当数据库打开成功时,该 Promise 将解析为数据库对象。如果数据库打开失败,该 Promise 将被拒绝。

API

  • add

    添加数据

    参数:

    参数说明类型
    storeName存储对象的名称。该名称必须是 T 类型对象的键K/string
    data存储对象的数据。其类型与 T 类型对象中对应键的值的类型相同。T[K]
  • update

    更新数据

    参数:

    参数说明类型
    storeName存储对象的名称。该名称必须是 T 类型对象的键K/string
    data存储对象的数据。其类型与 T 类型对象中对应键的值的类型相同。T[K]
  • delete

    删除数据

    参数:

    参数说明类型
    storeName存储对象的名称。该名称必须是 T 类型对象的键K/string
    id根据StoreConfig里的keyPath键路径删除数据。IDBValidKey/IDBKeyRange
  • get

    根据 id 获取数据

    参数:

    参数说明类型
    storeName存储对象的名称。该名称必须是 T 类型对象的键K/string
    id查找记录的键或键范围。StoreConfig里的keyPathIDBValidKey/IDBKeyRange

    返回值:Promise<T[K]>

  • getByIndex

    根据索引获取数据

    参数:

    参数说明类型
    storeName存储对象的名称。该名称必须是 T 类型对象的键K/string
    indexNameIndexConfig里的keyPath键路径名称。string
    indexValue查询条件参数。IDBValidKey/IDBKeyRange

    返回值:Promise<T[K]>