IndexDB 核心概念

keyPath

1 .规定了把object哪个属性作为检索的入口
2 .objectStore.get(1)方法,就是通过传入索引的值来查找数据 此时要找id=1的数据
3 .这里的keyPath是创建的时候传入的值

indexName

1 .其实就是索引的名字,在创建objectStore的时候,为了以后查找方便,还要创建别的索引表。
2 .这张表里面就是以传入名字作为主键的一张关联表。也就是这样表的kayPath是你定义的索引
3 .注意,高级的用法是一个indexName对应多个keyPath

primaryKey

1 .一个索引在储存时,一定会把对应的primaryKey存进来,其实就是这个Objectstore的keyPath值,这个是索引的keyPath,设计上indexDB给索引加上了一个PrimaryKey,这样可以快速定位对象的具体位置

key

1 .这里的key指的是值,而非键。objectStore.get()传入的并非是一个属性的名字,而是属性的值
2 .

indexedDB事物的生命周期

1 .一个事务,会在他的声明周期里面规定的操作全部执行,一旦执行完毕,周期结束之后,那么事务就关闭了。不能利用这个事物进行下一部操作
2 .也就是说,不能在全局的某个地方创建一个事务,然后用一个变量保存起来,然后再后续操作中使用
3 .在indexDB中,事务会在非常短的时间内循环检查自己,当发现自己内部已经没有任务任务要做的时候,就会将自己关闭。
4 .

put和add区别

1 .如果obejctStore中已经有了这个id,那么表示更新这个object,如果没有,则添加这个object
2 .当设置了autoIncrement为true的时候,也就是主键自增的时候,put方法必须转入第二个参数。这第二个参数是主键的值,以此来确定你要更新的是哪一个主键对应的obejct.如果不传的话,可能会直接增加一个object到数据库中。所以最好还是不要使用自增字段,而是确保自己在传入的时候保证object中存在主键值
3 .推荐的做法:不设置autoIncrement,无论是添加还是修改object,都使用put。只要开发者注意传入object的时候一定要有一个主键即可

游标

1 .游标是一种机制,你无法打印游标,但是可以通过游标得到你当前操作的元素。同时,游标也就意味着有类似于next的方法,可以用来移动下一个位置
2 .对已知的集合对象进行遍历,在onsuccess中使用continue进行控制
3 .用来改进下一个相同的索引值可能会有很多返回情况的给做了改进
4 .

createObject

1 .autoIncrement:主键是否自增,如果为true,那么你在添加一个object的时候,可以不用传id,id会自动加1,但是这样的话,你就不知道这个object的id到底是多少,所以默认为false。但是你查的时候也不一定非要用这个查吧
2 .keyPath:主键,你将要存入object的一个property name

deleteObjectStore

1 .删除的时候,他的所有index也被删除了

常用api

https://www.tangshuang.net/3735.html#title-1
https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API

IDBCursor对象

1 .代表指针对象,用来遍历数据仓库IDBObjectStore或者IDBIndex索引的记录
2 .属性

1 .source:返回正在遍历的对象仓库或者索引
2 .direction:字符串,表示指针遍历的方向。该属性可以通过openCursor()方法的第二个参数指定,一旦指定就不能改变了
3 .key:返回当前记录的主键
4 .value:返回当前记录的数据值
5 .primaryKey:对于数据仓库来说,返回的是key,对于索引来说,返回的是数据记录的主键

IDBKeyRange对象

1 .代表数据仓库里面的一组主键,根据这组主键,可以获取数据仓库或索引里面的一组记录
2 .指定上限

let x=IDBKeyRange.upperBound(x)
<=x

let x=IDBKeyRange.upperBound(x,true)
<x

3 .指定下限

let x=IDBKeyRange.lowerBound(y)
>=x

let x=IDBKeyRange.lowerBound(y,true)
>x

4 .同时指定上下限

let x=IDBKeyRange.bound(x,y)
let x=IDBKeyRange.bound(x,y,true,false)
//(false,false),(false,true),(true,true)

5 .获取一个值

let x=IDBKeyRange.only(x)
=x

6 .实例对象生成之后,将他作为参数输入IDBObjectStore或者IDBIndex对象的openCursor()方法,就可以在所设定的范围内读取数据
7 .实例组件有一个includes()方法来判断一个值是否在当前主键组内。
8 .但是这个适合比较一些数字吧,比如年龄之类的进行筛选,别的还是不行吧
9 .

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容