引用文档:
HTML5本地存储——IndexedDB(一:基本使用)
HTML5本地存储——IndexedDB(二:索引)
IndexedDB API
JavaScript高级程序设计(第三版)
在上一篇文章HTML5本地存储IndexedDB基础介绍(-)-数据库的简单增删改查向大家介绍了IndexedDB的简单增删改查,这篇文章将主要向大家介绍IndexedDB的游标与索引,通过游标与索引可以使得对于数据的查找更加方便,提高搜索速度
IndexedDB游标查询:
通过事务transaction
可以根据已知的键检索单个对象,当我们需要检索多个对象或者遍历时就需要在事务内部创建游标。游标是指向结果集的指针。与传统数据库的查询不同,游标不提前收集结果。游标指针会先指向结果中的第一项,在接到查找下一项的指令时,才会指向下一项。
在对象存储空间上调用openCursor()
方法可以创建游标,与IndexedDB
其它操作一样,openCursor()
方法返回的是IDBRequest
,因此需要在onerror
、onsuccess
事件中处理程序。代码示例如下:
var store = db.transaction(storename,'readwrite').objectStore(storename);
var request = store.openCursor();//db为IDBDatabase对象
request.onerror = function(e){
}
request.onsuccess = function(e){
console.log('游标开始查询')
var cursor = e.target.result;
if(cursor){//必须要检查
console.log(cursor);
cursor.continue();//遍历了存储对象中的所有内容
}else{
}
};
从上述代码中可以看到在onsuccess
事件处理程序中,有两行代码分别是:
var cursor = e.target.result
cursor.continue
e.target.result
可以取得存储空间的下一个对象,当结果集中有下一个对象时,e.target.result
是一个IDBCursor
实例,没有下一个对象则为空。所以我们在查询之前都要用if判断一下是否有这个对象IDBCursor
,下图为打印出来的cursor
,打印出来的实例有以下几个属性:
- direction:表示游标移动的方向
- key:对象的键
- value:查找出的对象
- primaryKey:游标使用的键,可能是对象键,或者是索引键(目前尚未建立索引,所以图中键来自于学生的id)
图中我们看到出现的实例是IDBCursorWithValue
而非上述所说的IDBCursor
,google中控制台直接打出的就是这样的情况,官方API文档说两者的区别在于IDBCursorWithValue
包含了value
属性。
cursor.continue
的作用在于使游标移动到结果集的下一项,默认情况下游标只发起一次请求,要想发起另一次请求使游标继续查找,则需调用continue(key)