npm i indexeddb-toolkit
或
pnpm i indexeddb-toolkit
方式一
import { useDatabase } from 'indexeddb-toolkit'
方式二
import indexeddbToolkit from 'indexeddb-toolkit'
const { useDatabase } = indexeddbToolkit
方式三
<script src="../dist/indexeddb-toolkit.js"></script>
<script>
console.log(indexeddbToolkit)
</script>
学习API之前,提前先了解一下核心基础
- 由于indexeddb的一些限制,请不要创建表和创建数据库同时进行。
- 该库封装分为两大块:database,table的操作,对应着"数据库","表",也对应着对它们的crud方法延申。
- 本库都采用promise的方式,我们可以轻松使用async,await的方式拿到其结果。
- indexedb是支持nosql的非关系型数据库。
有很好用的三个API,笔者在这单独拿出来提一下
创建数据库useDatabase, 查询数据findDBData, 创建表createTable
1.useDatabase(dbName: string)
该方法可以不用考虑繁杂琐碎的原生API, 只需要传入一个名字便,无感创建/使用数据库,极大减小心智负担。
2.
createTable(dbName: string, tableName: string, indexs: any[])
该方法接收三个参数,数据库名,表名和索引数组。
当不太熟悉什么是索引时,我们可以看以下示例:
我们从indexeddb中某张表中查出了一条数据,
{id:1,age:18,sex:'男'}
以上对象中有id,age,sex为key,那么就可以任意选择这三个字段作为索引id数组中的某一项,这对后面查询方法会很有用,想查询出age=18的数据,就可以用索引来进行查询。
示例:
await createTable('db','tb',['id','name','age']) //创建表
await insertOne('db','tb',{id:1,age:18,sex:'男'}) //插入一条数据
使用索引查询数据
await findByIndex('db','tb','age','18') //这样就能查询出所有age为18的这一条数据
3.
findDBData(dbName: string, tableName?: string)
该方法用于查询数据库中表格的数据,可以传入两个参数,一个是dbName,一个是tbName,
当只传入dbName的时候,查询 该数据库下所有表,以及所有数据,呈树状结构
useDatabase(dbName: string)
: 使用/创建指定数据库deleteAllDatabases()
: 删除所有数据库deleteDatabase(dbName: string)
: 删除指定数据库getTableNames(dbName: string)
: 获取指定数据库的表名列表useDatabase(dbName: string)
dbName
- 数据库名称//使用示例
(async function() {
let res = await useDatabase("数据库名称");
})();
//或者
useDatabase('dbName').then()
deleteAllDatabases()
deleteDatabase(dbName: string)
dbName
- 数据库名称getTableNames(dbName: string)
dbName
- 数据库名称createTable(dbName: string, tableName: string, indexs: any[])
: 创建表deleteTable(dbName: string, tableName: string)
: 删除指定表createTable(dbName: string, tableName: string, indexs: any[])
dbName
- 数据库名称tableName
- 表名称indexs
- 索引数组//创建表
(async function() {
let res = await createTable("数据库名称", "表的名称", "索引数组");
})();
deleteTable(dbName: string, tableName: string)
dbName
- 数据库名称tableName
- 表名称deleteAllTables(dbName: string)
dbName
- 数据库名称注意事项:
findByKey和findByIndex时,最后一个参数为isAll,因为indexeddb根据主键和索引查询出来的数据只展示第一条,
可以通过这个参数来控制是展示查询到的第一条还是全部数据。
findDBData(dbName: string, tableName?: string)
: 查询表的数据findByKey(dbName: string, tableName: string, key: any, isAll: boolean = true)
: 根据主键查询数据findByIndex(dbName: string, tableName: string, indexName: string, indexValue: any,isAll: boolean = true)
:
根据索引查询insertOne(dbName: any, tableName: string, data: any)
: 向指定表中插入一条数据(async function() {
//插入一条数据
let res = await insertOne("数据库名称", "表的名称", "数据");
})();
updateDataByPrimaryKey(dbName: any, storeName: string, id: number, data: any
): 根据主键更新数据(async function() {
//根据主键更新数据
let res = await updateDataByPrimaryKey(
"数据库名称",
"表的名称",
"主键",
"数据"
);
})();
deleteOneByIndex(dbName: string, tableName: string, indexName: string, indexValue: any)
:
根据索引删除数据deleteManyByKeys(dbName: string, tableName: string, ids: number[])
: 根据主键数组批量删除数据deleteManyByIndex(dbName: string, tableName: string, indexName: string, indexValues: any[])
:
根据索引批量删除数据findDBData(dbName: string, tableName?: string)
dbName
- 数据库名称tableName
- 表名称,可选,不传则查询所有表的数据(async function() {
//查询表的数据
let res = await updateDataByPrimaryKey("数据库名称", "表的名称_可选");
})();
findByKey(dbName: string, tableName: string, key: any)
dbName
- 数据库名称tableName
- 表名称key
- 主键值findByIndex(dbName: string, tableName: string, indexName: string, indexValue: any)
dbName
- 数据库名称tableName
- 表名称indexName
- 索引名称indexValue
- 索引值insertOne(dbName: any, tableName: string, data: any)
dbName
- 数据库名称tableName
- 表名称data
- 待插入的数据对象insertMany(dbName: any, tableName: string, data: any[])
dbName
- 数据库名称tableName
- 表名称data
- 待插入的数据数组updateDataByPrimaryKey(dbName: any, storeName: string, id: number, data: any)
dbName
- 数据库名称storeName
- 存储对象的名称id
- 主键值data
- 要更新的数据对象updateDataByIndex(dbName: any, storeName: string, indexName: string, indexValue: any, data: any)
dbName
- 数据库名称storeName
- 存储对象的名称indexName
- 索引名称indexValue
- 索引值data
- 要更新的数据对象deleteOneByPk(dbName: string, tableName: string, id: number)
dbName
- 数据库名称tableName
- 表名称id
- 主键值deleteOneByIndex(dbName: string, tableName: string, indexName: string, indexValue: any)
dbName
- 数据库名称tableName
- 表名称indexName
- 索引名称indexValue
- 索引值deleteManyByPK(dbName: string, tableName: string, ids: number[])
dbName
- 数据库名称tableName
- 表名称ids
- 主键值数组deleteManyByIndex(dbName: string, tableName: string, indexName: string, indexValues: any[])
dbName
- 数据库名称tableName
- 表名称indexName
- 索引名称indexValues
- 索引值数组