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 .

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,869评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,716评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,223评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,047评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,089评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,839评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,516评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,410评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,920评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,052评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,179评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,868评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,522评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,070评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,186评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,487评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,162评论 2 356