npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

indexeddb-toolkit

v0.0.4

Published

A toolkit for working with IndexedDB

Downloads

10

Readme

indexeddb-toolkit

  • indexeddb-toolkit是一个用于浏览器的轻量级数据库操作库,使用 ts+promise 提供了对 IndexedDB 的封装和便捷的 API,用于简化数据库的创建、表的管理和数据的增删改查操作。它提供了一系列的方法来操作数据库和表,包括创建、删除、查询和更新数据等功能,来减少开发者的成本,API命名与主流数据库orm类似,

项目地址

gitee : https://gitee.com/chen-jingsheng-123/indexeddb-toolkit

github : https://github.com/LiCHUYA/indexeddb-toolkit

type-doc : https://lichuya.github.io/indexeddb-toolkit-typedocs/

安装

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之前,提前先了解一下核心基础

  1. 由于indexeddb的一些限制,请不要创建表和创建数据库同时进行。
  2. 该库封装分为两大块:database,table的操作,对应着"数据库","表",也对应着对它们的crud方法延申。
  3. 本库都采用promise的方式,我们可以轻松使用async,await的方式拿到其结果。
  4. 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 - 数据库名称
  • 返回值:返回一个 Promise 对象,包含当前数据库实例
//使用示例
(async function() {
  let res = await useDatabase("数据库名称");
})();

//或者
useDatabase('dbName').then()

deleteAllDatabases()

  • 功能:删除所有数据库
  • 参数:无
  • 返回值:返回一个 Promise 对象,包含删除结果的状态和消息

deleteDatabase(dbName: string)

  • 功能:删除指定数据库
  • 参数:
    • dbName - 数据库名称
  • 返回值:返回一个 Promise 对象,包含删除结果的状态和消息

getTableNames(dbName: string)

  • 功能:获取指定数据库中的表名列表
  • 参数:
    • dbName - 数据库名称
  • 返回值:返回一个 Promise 对象,包含表名称数组

表的操作方法

创建表

  • createTable(dbName: string, tableName: string, indexs: any[]): 创建表
  • deleteTable(dbName: string, tableName: string): 删除指定表
  • `deleteAllTables(dbName: string): 删除所有表

createTable(dbName: string, tableName: string, indexs: any[])

  • 功能:创建表
  • 参数:
    • dbName - 数据库名称
    • tableName - 表名称
    • indexs - 索引数组
  • 返回值:返回一个 Promise 对象,包含创建结果的状态和状态码
//创建表
(async function() {
  let res = await createTable("数据库名称", "表的名称", "索引数组");
})();

deleteTable(dbName: string, tableName: string)

  • 功能:删除指定表
  • 参数:
    • dbName - 数据库名称
    • tableName - 表名称
  • 返回值:返回一个 Promise 对象,包含删除结果的状态和消息

deleteAllTables(dbName: string)

  • 功能:删除指定数据库中的所有表
  • 参数:
    • dbName - 数据库名称
  • 返回值:返回一个 Promise 对象,包含删除结果的状态和消息

表数据操作方法

查询

注意事项:

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): 向指定表中插入一条数据
  • `insertMany(dbName: any, tableName: string, data: any[]): 向指定表中插入多条数据
(async function() {
  //插入一条数据
  let res = await insertOne("数据库名称", "表的名称", "数据");
})();

更新

  • updateDataByPrimaryKey(dbName: any, storeName: string, id: number, data: any): 根据主键更新数据
  • `updateDataByIndex(dbName: any, storeName: string, indexName: string, indexValue: any, data: any): 根据索引更新数据
(async function() {
  //根据主键更新数据
  let res = await updateDataByPrimaryKey(
    "数据库名称",
    "表的名称",
    "主键",
    "数据"
  );
})();

删除

  • `deleteOneByPk(dbName: string, tableName: string, id: number): 根据主键删除数据
  • 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[]): 根据索引批量删除数据

CRUD方法具体介绍

findDBData(dbName: string, tableName?: string)

  • 功能:查询数据库中表的数据
  • 参数:
    • dbName - 数据库名称
    • tableName - 表名称,可选,不传则查询所有表的数据
  • 返回值:返回一个 Promise 对象,包含查询结果数组
(async function() {
  //查询表的数据
  let res = await updateDataByPrimaryKey("数据库名称", "表的名称_可选");
})();

findByKey(dbName: string, tableName: string, key: any)

  • 功能:根据主键查询数据
  • 参数:
    • dbName - 数据库名称
    • tableName - 表名称
    • key - 主键值
  • 返回值:返回一个 Promise 对象,包含查询结果对象

findByIndex(dbName: string, tableName: string, indexName: string, indexValue: any)

  • 功能:根据索引查询数据
  • 参数:
    • dbName - 数据库名称
    • tableName - 表名称
    • indexName - 索引名称
    • indexValue - 索引值
  • 返回值:返回一个 Promise 对象,包含查询结果对象

insertOne(dbName: any, tableName: string, data: any)

  • 功能:向指定表中插入一条数据
  • 参数:
    • dbName - 数据库名称
    • tableName - 表名称
    • data - 待插入的数据对象
  • 返回值:返回一个 Promise 对象,包含插入结果的状态

insertMany(dbName: any, tableName: string, data: any[])

  • 功能:向指定表中插入多条数据
  • 参数:
    • dbName - 数据库名称
    • tableName - 表名称
    • data - 待插入的数据数组
  • 返回值:返回一个 Promise 对象,包含插入结果的状态

updateDataByPrimaryKey(dbName: any, storeName: string, id: number, data: any)

  • 功能:根据主键更新数据
  • 参数:
    • dbName - 数据库名称
    • storeName - 存储对象的名称
    • id - 主键值
    • data - 要更新的数据对象
  • 返回值:返回一个 Promise 对象,包含更新结果的状态

updateDataByIndex(dbName: any, storeName: string, indexName: string, indexValue: any, data: any)

  • 功能:根据索引更新数据
  • 参数:
    • dbName - 数据库名称
    • storeName - 存储对象的名称
    • indexName - 索引名称
    • indexValue - 索引值
    • data - 要更新的数据对象
  • 返回值:返回一个 Promise 对象,包含更新结果的状态

deleteOneByPk(dbName: string, tableName: string, id: number)

  • 功能:根据主键删除数据
  • 参数:
    • dbName - 数据库名称
    • tableName - 表名称
    • id - 主键值
  • 返回值:返回一个 Promise 对象,包含删除结果的状态和消息

deleteOneByIndex(dbName: string, tableName: string, indexName: string, indexValue: any)

  • 功能:根据索引删除数据
  • 参数:
    • dbName - 数据库名称
    • tableName - 表名称
    • indexName - 索引名称
    • indexValue - 索引值
  • 返回值:返回一个 Promise 对象,包含删除结果的状态和消息

deleteManyByPK(dbName: string, tableName: string, ids: number[])

  • 功能:根据主键数组批量删除数据
  • 参数:
    • dbName - 数据库名称
    • tableName - 表名称
    • ids - 主键值数组
  • 返回值:返回一个 Promise 对象,包含删除结果的状态和消息

deleteManyByIndex(dbName: string, tableName: string, indexName: string, indexValues: any[])

  • 功能:根据索引批量删除数据
  • 参数:
    • dbName - 数据库名称
    • tableName - 表名称
    • indexName - 索引名称
    • indexValues - 索引值数组
  • 返回值:返回一个 Promise 对象,包含删除结果的状态和消息