文章目录
- 一、参考链接
- 二、概念
- 1、数据库
- 2、对象仓库
- 3、数据记录
- 4、索引
- 5、事务
- 三、IndexedDB 把不同的实体,抽象成一个个对象接口
- 四、注意事项
- 1、event
一、参考链接
- 优秀文章:http://www.ruanyifeng.com/blog/2018/07/indexeddb.html
- 官网:https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API
二、概念
1、数据库
- 数据库是一系列相关数据的容器。每个域名都可以新建任意多个数据库
- IndexedDB 数据库有版本的概念,同一个时刻,只能有一个版本的数据库存在
- 如果要修改数据库结构(新增或删除表、索引或者主键),只能通过升级数据库版本
2、对象仓库
- 每个数据库包含若干个对象仓库(object store),它类似于关系型数据库的表
3、数据记录
- 对象仓库保存的是数据记录,每条记录类似于关系型数据库的行,但是只有主键和数据体
- 主键用来建立默认的索引,必须是不同的,否则会报错
- 数据体可以是任意数据类型
- 主键可以是数据记录里面的一个属性,也可以指定为一个递增的整数编号
4、索引
- 为了加速数据的检索,可以在对象仓库里面,为不同的属性建立索引
5、事务
- 数据记录的读写和删改,都要通过事务完成,事务对象提供error、abort、complete三个事件,用来监听操作结果
三、IndexedDB 把不同的实体,抽象成一个个对象接口
- 数据库实例 IDBDatabase
- 对象仓库 IDBObjectStore
- 索引 IDBIndex
- 事务 IDBTransaction
- 操作请求 IDBRequest
- 指针: IDBCursor
- 主键集合:IDBKeyRange
四、注意事项
1、event
event.target
= 每次操作返回的requestconst db=event.target.result
=const db=dBOpenDBRequest.result
- 每次操作的下一个操作都是在这次操作的成功的回调方法中进行,否则异常:
Failed to read the 'result' property from 'IDBRequest': The request has not finished
,意思是 请求尚未完成,在成功的回调方法中进行就是请求已经完成了- 比如
//数据库打开成功回调函数 dBOpenDBRequest.onsuccess=(event)=>{this.db=event.target.result }//查询单条数据 //此时就会报上面那个错 this.qteId=coreObjectStore.get(this.qteIdKey).result //正确做法 coreObjectStore.get(this.qteIdKey).onsuccess=(event)=>{this.qteId=event.target.result.value }
- 比如