# indexdb **Repository Path**: lucson/indexdb ## Basic Information - **Project Name**: indexdb - **Description**: 支持Promise 便捷简单的 Indexdb 增删改查 的工具包 使用简单 减少很多操作 Indexdb 的复杂度 API 即调即用 减少大量重复性代码 - **Primary Language**: JavaScript - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: https://www.npmjs.com/package/@liwenxiang/indexdb - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2022-02-23 - **Last Updated**: 2022-11-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: JavaScript ## README ## 介绍 支持Promise 便捷简单的 Indexdb 增删改查 的工具包 使用简单 减少很多操作 Indexdb 的复杂度 API 即调即用 减少大量重复性代码 刚简单学了一下 Indexdb 简单封装一个 工具包以后用 ## 安装 indexdb.js 在 dist 文件内 ### 浏览器直接引入 ```js ``` ### Npm 安装 ```js npm install --save @liwenxiang/indexdb import Indexdb from "@liwenxiang/indexdb" ``` > npm 引入后使用 ES6模块方式移入 ## 调试方式 IndexDb 在 控制台 F12 后的 Application 面板中 左侧导航找到 IndexDB 即可调试数据 ## 使用 实例化 IndexDb 类得到 db 实例 参数传递一个**数据库**的名字 **内部数据库的版本号 存储在了 localStorage 中 IndexDb 规定每次创建新表或者添加内容更新内容都要打开数据库并且要有更新的版本号.. 但是只有在新增表格的时候版本号才会实际的进行增加 在 本地存储 查看 以表名命名的版本数字ID** ```js const db = new IndexDb("animal"); ``` ## API ### db.isSupportIndexDb() 返回值 + IDBOpenDBRequest 对象 > 判断是否支持IndexDB 如果支持则顺带顺带创建数据库 内部调用 使用者无需关心 ### db.createDatabase() 返回值 + Promise + 可以通过 then 和 catch 判断是否创建成功 实例: ```js db.createDatabase().then(e=>{ console.log("create success !!!") }); ``` > 创建数据库 ### db.createTable(tableName,[primaryKeyOptions = {keyPath: "id", autoIncrement: false },indexOptions={{options:{unique: false}}}]) 参数 + tableName 表名 + primaryKeyOptions 主键的配置项 + keyPath 主键的字段名 默认就是 id 如果不修改 每次添加数据会自动生成一个标识值 添加时此字段不填 如果修改了 在之后的API中需要做对应参数的传入进行区分 后面用到了会讲到 + indexOptions 创建索引 在创建表的同时给表增加一个索引字段 以后可以通过专属的方法进行数据的查找 + fieldName 索引名 + unique 默认是 false 表示是否不重复 false 表示可能会重复 返回值 + Promise 可以通过 then 和 catch 判断是否创建成功 实例: ```js db.createTable("pet",{keyPath:"id"},{ fieldName:"name", options:{ unique:false } }).then(e=>{ console.log("create pet success !!!") }); ``` > 创建表格 如果表已存在则报错 ### db.add(tableName,data,customPrimaryKey) 参数 + tableName 表名 + data 添加的数据 这里的数据添加很自由 就是一个对象 + customPrimaryKey 是否自定义了主键字段 在创建表的时候指定 默认 id 会自动生成一个随机的标识值 如果自定义了主键这里需要填 `true` 并且 `data` 要带上您自定义的主键字段 保证每一次的值是唯一即可 返回值 + Promise 可以通过 then 和 catch 判断是否创建成功 并拿到添加的数据 实例: ```js db.add("pet",{name:"Jack",hobby:["piano","basketball","table tennis","violin"]}) .then(success=>{ console.log(success); }) ``` > 添加数据 保持主键唯一 ### db.commonPart(tableName,isWrite) 内部调用 使用者不用关心此API > 公共调用部分 ### db.selectKey(tableName,primaryKey) 参数 + tableName 表名 + primaryKey 主键值 返回值 + Promise 可以通过 then 和 catch 判断是否创建成功 并拿查询的数据 实例: ```js db.selectKey("pet","884ceecf8").then(e=>{ console.log(e) }); ``` > 根据主键查询 ### db.selectIndex(tableName,indexName,indexFieldValue) 参数 + tableName 表名 + indexName 索引名 + indexFieldValue 索引值 返回值 + Promise 可以通过 then 和 catch 判断是否创建成功 并拿查询的数据 实例: ```js db.selectIndex("pet","name","Nick").then(e=>{ console.log(e) }); ``` > 根据索引查询数据 ### db.selectAll(tableName) 参数 + tableName 表名 返回值 + Promise 可以通过 then 和 catch 判断是否创建成功 并拿查询的数据 实例: ```js db.selectAll("pet").then(e=>{ console.log(e) }); ``` > 根据表名查询所有 ### db.delete(tableName,indexFieldData) 参数 + tableName 表名 + indexFieldData 主键字段值 ``` db.delete("pet","efd94628").then((e)=>{ console.log(e) }) ``` 返回值 + Promise 可以通过 then 和 catch 判断是否创建成功 并拿到删除的这条数据 ### db.put(tbName,updateData) 参数 + tabName 表名 + updateData 要更新的数据 记得把主键给加上进行匹配 实例: ```js db.put("pet",{ id:"884ceecf8", name:"Work", age:100 }) .then(r=>{ console.log(r) }) ``` > 修改数据 ## 小技巧 ### 判断是否数据库已创建 通过 localstorge 进行判断 下面是示例代码 ```js const dbName = "qq"; const db = new Indexdb(dbName); if (!localStorage.getItem(dbName)) { db.createDatabase().then((e) => { db.createTable("chat_record") .then((e) => { Toast("初始化成功"); clearInterval(timer); }) .catch(() => {}); }); } else { console.log("已创建"); } ``` > 这里的dbName为你设置的数据库名