indexDB插件idb-easy,简化操作

介绍

一个简单易用的 IndexedDB 封装库,旨在简化数据库操作,使开发者能够方便地进行数据存储和检索。通过提供实例化的 API,可以轻松管理和操作 IndexedDB 数据库。

githup

https://github.com/MyTheKing/idb-easy.git

安装

npm install idb-easy

导入

import idbEasy from 'idb-easy'

创建实例

const db = new idbEasy(dbName, dataTableName, keyPath, autoIncrement, createIndex,version); 
属性类型详解
dbNamestring创建当前数据库的名字
dataTableNamestring需要在数据库中创建的表(一个版本只能创建一个表)
keyPathstring | null默认值:null,当前表里的唯一主键(如果为null,autoIncrement 必须为 true)
autoIncrementboolean默认值:true,是否系统自动递增主键值(数据中没有主键,必须为true,否则添加报错)
createIndexArray<object>默认值:[],创建表里的索引。索引可以帮助你根据某个字段来查询、排序和过滤数据,而不必直接使用主键。(一个表可以创建多个索引)
versionnumber默认值:1,当前数据库的版本号

createIndex 参数:

  • indexName:这是索引的名字,用于识别索引。

  • keyPath:这是要建立索引的字段名或者是描述如何从对象中提取索引键值的路径。它可以是一个字符串或一个字符串数组。

  • options:这是一个可选的对象,可以包含以下属性:

    • multiEntry:布尔值,表示一个对象是否可以在索引中有多个条目。如果 keyPath 指向的是一个数组,那么 multiEntry: true 表示索引会为数组中的每个元素创建一个单独的索引条目。

    • unique:布尔值,表示索引键是否必须是唯一的。如果设置为 true,则不允许有相同的键值出现多次。

创建数据库

open() 方法

  • 用于打开一个已存在的 IndexedDB 数据库或创建一个新数据库。该方法返回一个 Promise 对象。

let createIndex = [
  {
    indexName: "queryShopId",
    keyPath: "shopId",
    options: {
      unique: true, 
    },
  },
  {
    indexName: "queryShopName",
    keyPath: "shopName",
    options: {
      unique: false, 
    },
  },
]
const db = new idbEasy("test", "data1", "shopId", true, createIndex,1); 
db.open()
  .then(database => {
    console.log("数据库已成功打开:", database);
  })
  .catch(error => {
    console.error("打开数据库失败:", error);
  });

操作表数据

addOrUpdate(type,data,tableName) 方法

  • 用于向表中添加和更新数据。该方法返回一个 Promise 对象。

该方法需要传递三个值:

  • type:里面有两个可选值。addput

    • add:方法用于向对象存储空间添加新的记录。如果试图添加一个已经存在的主键(即对象存储空间中已经有相同主键的记录),add 方法会抛出一个错误。

    • put:方法用于更新或插入记录。如果提供的记录的主键已经存在于对象存储空间中,put 方法会更新现有记录;如果主键不存在,则会插入新的记录。

  • data:传递的数据。如果不是对象类型(键值对),默认以键items赋值进去。

  • tableName:操作目标的表。(默认跟随创建当前版本的表名)

注意: 如果是代理对象不可操作,需要进行转换为普通对象。

例如:

JSON.parse(JSON.stringify(value))

添加

const add = () => {
  list.value.forEach((value) => {
    db.addOrUpdate("add", JSON.parse(JSON.stringify(value)), "data1")
      .then((res) => {
        console.log("添加成功");
      })
      .catch((error) => {
        console.log("添加失败", error);
      });
  });
​
  db.addOrUpdate("add", 1)
    .then((res) => {
      console.log("添加成功");
    })
    .catch((error) => {
      console.log("添加失败", error);
    });
};

更新

在这个表中只会去更新主键匹配项,如果没有则添加。该方法返回一个 Promise 对象。

let obj = {
  shopId: 107,
  shopMSg: "hhhh"
};
​
const update = () => {
  db.addOrUpdate("put", obj, "data1")
    .then((res) => {
      console.log("更新成功");
    })
    .catch((error) => {
      console.log(error, "更新");
    });
};

修改某一项

updateData(id,data,tableName) 方法

  • 修改表中匹配主键的某一项。该方法返回一个 Promise 对象。

该方法需要传递三个值:

  • id:主键。

  • data:需要更改的数据。

  • tableName:操作目标的表。(默认跟随创建当前版本的表名)。

const updateData = () => {
  db.updateData(108, { shopMsg: "66666", shopName: "6666.66" })
    .then((res) => {
      console.log("更新成功");
    })
    .catch((error) => {
      console.log(error, "更新失败");
    });
};

版本更新

updateVersion(version, dataTableName, keyPath, autoIncrement, createIndex) 方法

参数介绍可查看上文创建实例

const updateVersion = () => {  
  let createIndex =  [
  {
    indexName: "phone",
    keyPath: "shopTel",
    options: {
      unique: false,
    }
  }
]
  db.updateVersion(6,"data2","shopId", true, createIndex)
    .then((database) => {
      console.log("数据库已更新:", database);
    })
    .catch((error) => {
      console.error("更新数据库失败:", error);
    })
};

查询表中指定主键项数据

queryDB(id,tableName) 方法

  • id:主键。

  • tableName:操作目标的表。(默认跟随创建当前版本的表名)。

const queryIndex = () => {
  db.queryDB(101,"data1")
    .then((res) => {
      console.log(res);
    })
    .catch((error) => {
      console.log(error);
    });
};

读取某一个表的数据

readAll(tableName) 方法

  • tableName:操作目标的表。(默认跟随创建当前版本的表名)。

const readAll = () => {
  db.readAll("data1")
    .then((res) => {
      console.log(res);
    })
    .catch((error) => {
      console.log(error, "读取数据失败");
    });
};

读取数据库中所有表的数据

readAllTables() 方法

const readAllTables = () => {
  db.readAllTables()
    .then((res) => {
      console.log(res);
    })
    .catch((error) => {
      console.log(error, "读取数据失败");
    });
};

索引查询

indexQuery(indexName,index,tableName) 方法

  • indexName:索引名。

  • index:索引路径

  • tableName:操作目标的表。(默认跟随创建当前版本的表名)。

const indexQuery = () => {
  db.indexQuery("phone", "13312345678","data2")
    .then((res) => {
      console.log(res);
    })
    .catch((error) => {
      console.log(error, "查询失败");
    });
};

删除表中指定主键项数据

remove(id,tableName) 方法

  • id:主键。

  • tableName:操作目标的表。(默认跟随创建当前版本的表名)。

const remove = () => {
  db.remove(102, "data2")
    .then((res) => {
      console.log("删除成功");
    })
    .catch((error) => {
      console.log(error, "删除失败");
    });
};

删除数据库

deleteDB(dbName) 方法

  • dbName:数据库的名字。

const deleteDB = () => {
  db.deleteDB("test")
    .then((res) => {
      console.log("删除成功" + res);
    })
    .catch((err) => {
      console.log("删除失败" + err);
    });
    location.reload()
};

注意:window.indexedDB.deleteDatabase(name)有遗留bug,删除成功不会触发回调,删除失败会走onsuccess(then)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

joshua king

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值