HTML5本地存储IndexedDB基础介绍(二)- 游标和索引

引用文档:

HTML5本地存储——IndexedDB(一:基本使用)
HTML5本地存储——IndexedDB(二:索引)
IndexedDB API
JavaScript高级程序设计(第三版)

在上一篇文章HTML5本地存储IndexedDB基础介绍(-)-数据库的简单增删改查向大家介绍了IndexedDB的简单增删改查,这篇文章将主要向大家介绍IndexedDB的游标与索引,通过游标与索引可以使得对于数据的查找更加方便,提高搜索速度

IndexedDB游标查询:

通过事务transaction可以根据已知的键检索单个对象,当我们需要检索多个对象或者遍历时就需要在事务内部创建游标。游标是指向结果集的指针。与传统数据库的查询不同,游标不提前收集结果。游标指针会先指向结果中的第一项,在接到查找下一项的指令时,才会指向下一项。

在对象存储空间上调用openCursor()方法可以创建游标,与IndexedDB其它操作一样,openCursor()方法返回的是IDBRequest,因此需要在onerroronsuccess事件中处理程序。代码示例如下:

            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)
还有 86% 的精彩内容
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容