一个封装IndexedDB的简陋模块
通过几个简单(?)的函数操作IDB
import easyIDB from './easyIDB.js'
or
var easyIDB = require('./easyIDB.js')
or
<script src="./easyIDB.js"></script>
<script>
var myIDB = easyIDBMain('mydatabase')
</script>
实际上是调用了openDB方法,具体参数参考第三条第一个方法
let myIDB = easyIDB(IDBName,newIndex)
如果name为空,则返回一个未绑定数据库的easyIDB对象,需要使用openDB打开数据库
实例化之后可以通过该实例的方法例如
myIDB.get(storeName,key,value)
来操作数据库
打开数据库,没有则创建
参数说明
参数名 | 类型 | 必须 | 说明 |
---|---|---|---|
IDBName | string\object | 是 | 数据库名 |
newIndexs | array | 否 | store列表 |
当IDBName是字符串时,直接作为数据库名字,打开当前已存在的版本的数据库,不进行数据库更新
当IDBName为对象时,可以指定数据库版本进行强制更新,参考参数如下
{
name:"myIDB",
ver:10
}
仅当数据库进行版本更新或者在该用户上第一次创建数据库,会根据newIndexs数组进行store的创建
参考的newIndexs数组
[
{
name:"xxx",//storeName
indexs:[//添加索引
{
name:"mystore",
unique:false//是否唯一 默认false
},
name:"mystore2",
unique:true
},
],
option:{
keyPath:'id',//主键,默认 'id'
autoIncrement:true//是否自增,默认 true
}
},
{
name:"xxxx",//storeName
indexs:[//添加索引
{
name:"mystore",
unique:false//是否唯一 默认false
},
name:"mystore2",
unique:true
},
],
option:{
keyPath:'id',//主键,默认 'id'
autoIncrement:true//是否自增,默认 true
}
}
]
*这不是TS,只是方便看才这样写,下同
根据给定的storeName和key和value,在指定的store中寻找该对象,并返回一个数组(promise对象)
参数名 | 类型 | 必须 | 说明 |
---|---|---|---|
storeName | string | 是 | |
key | string | 否 | 查找根据的键,既可以是主键也可以是索引 |
value | string/regexp/array | 否 | 查找值 |
async function(){
let data = await myIDB.get('mystore','id','23')
Array.isArray(data) // true
data = await myIDB.get('mystore','name',/2$/)
Array.isArray(data) // true
}
向指定的store添加记录
参数名 | 类型 | 必须 | 说明 |
---|---|---|---|
storeName | string | 是 | |
data | object/array | 是 | 添加的数据 |
myIDB.push('mystore',{name:'2233'})
myIDB.push('mystore',[
{
name:22
},
{
name:33
}
]])
在指定的store中删除一条记录
参数名 | 类型 | 必须 | 说明 |
---|---|---|---|
storeName | string | 是 | |
key | string | 是 | 查找根据的键,既可以是主键也可以是索引 |
value | string | 是 | 查找值 |
async function(){
await myIDB.del('mystore','id','2')
}
删除一张表的全部记录
myIDB.clearStore(storeName)
删除整个数据库
myIDB.deleteDatabase()