文档章节

indexedDB 小结

MoranZhu
 MoranZhu
发布于 2015/12/14 20:23
字数 1076
阅读 48
收藏 0

1.indexedDB简介

       使用indexedDB之前,最好使用以下代码,兼容不同浏览器。

 //数据库对象
window.indexedDB =window.indexedDB||window.webikitIndexedDB||window.mozIndexedDB||window.msIndexedDB;
//数据库事务
window.IDBTransaction = window.IDBTransaction||window.webikitIDBTransaction||window.mozIDBTransaction||window.msIDBTransaction;
//数据库查询条件
 window.IDBKeyRange = window.IDBKeyRange||window.webkitIDBKeyRange||window.mozIDBKeyRange||window.msIDBKeyRange;
//游标
window.IBDCursor =  window.IBDCursor ||window.webkitIBDCursor ||window.mozIBDCursor ||window.msIBDCursor ;

2.数据库中常用的操作

   2.1 创建及删除数据库

        创建:

  var  dbCon = indexedDB.open(dbName,dbVersion); 
        open()方法参数名为数据库名称和数据库版本。如果该数据库不存在,则会自动创建。
        删除:
        var DBDeleteRequest = window.indexedDB.deleteDatabase("toDoList");
   dbCon.onsuccess = function(e){//连接成功
                idb = e.target.result;
                //你的操作
        }
         dbCon.onerror= function(e){//连接失败 
                //你的操作
        }



 2.2  创建及删除对象仓库,相当于关系数据库中的表

      indexedDB中的数据库操作必须要在事务中进行,事务分为三类:

      只读事务,读写事务,版本更新事务。

      对数据仓库只进行  读  操作,可以使用  只读事务。 readonly

      添加 、修改、删除数据的操作必需要使用,读写事务。  readwrite

      创建、删除数据仓库必须使用版本更新事务,设置数据库的新版本号。设置新的版本号之后再连接数据库时,回先出发  onupgradeneeded  事件  ,然后再出发  onsuccess数据库连接成功事件。

     

    创建和删除数据仓库:

dbCon.onupgradeneeded = function(e){
console.log('连接升级!');
var libdb = e.target.result;
libdb.createObjectStore('newBooks',{keyPath:'id',autoIncrement:true});
    //createObjectStore()方法的两个参数分别为创建数据仓库的名称,以及一个对象包括数据仓库主键keyPath属性,以及主键是否自增长。
// libdb.deleteObjectStore('books');
   //deleteObjectStore('books');删除数据仓库方法,参数为数据仓库名称
};


 

  操作数据仓库:

     创建事务:

     var  txn = idb.transaction(objectStoreName,mode);  

     第一个参数为操作中需要用到的数据仓库,如果只涉及一个,可以直接传递数据仓库名称字符串,如果涉及多个,则将其放入数组中,然后将数组传入,第二个参数为事务模式,只读事务为  readonly ,读写事务均为  readwrite.

    var libtxn = idb.transaction('newBooks','readwrite');//创建事务
    var libstore = libtxn.objectStore('newBooks');//获取数据仓库对象,也可以是数组
    libstore.put({isbn:1001,title:'love',author:'Jim Jack'});//添加数据,若指定主键存在,则更新数据
    libstore.add({isbn:1002,title:'family',author:'J.K Rolling'});//添加数据,若制定逐渐存在则插入失败
    libstore.delete(key);//参数要删除数据的键
    libstore.count();//数据仓库中共有多少个数据对象



    所操作数据仓库不相关的事务可以同时执行,操作有相同数据仓库的两个事务,即使其中一个为只读事务也不能同时执行。

    (两个都是只读事务应该可以同时执行。本人猜测~~~)


创建和删除索引:

      在indexedDB数据库中,只能针对 被设为索引的属性值进行检索,不能针对没有被设为索引的属性值进行检索。

        
    dbCon.onupgradeneeded = function(e){
    console.log('连接升级!');
    var libdb = e.target.result;
    var stroe =  libdb.createObjectStore('newBooks',{keyPath:'id',autoIncrement:true});
    //createObjectStore()方法的两个参数分别为创建数据仓库的名称,以及一个对象包括数据仓库主键keyPath属性,以及主键是否自增长。
   var  name = 'indexName';  //索引名称
     var  indexProp = 'id';//索引属性
     var  opts = { unique:false, multiEntry:false };//配置索引
      var   idx =  stroe.createIndex(name,indexProp , opts);
       // stroe.deleteIndex("indexName");删除索引
};



游标:

         先创建事务,获取数据仓库对象,然后使用对象仓库的 openCursor  方法 可以创建游标。

                        //此处略去创建事务,获取数据仓库对象的代码

         var range = IDBKeyRange.bound();返回一个由一批数据的主键值组成的IDBKeyRange集合对象,当游标打开时,该集合中的主键值所指向的数据均被读取到游标中。
                        //IDBKeyRange.bound()      共有四个参数(低,高,低开集或闭集,高开集或闭集);
   //
IDBKeyRange.lowerBound()     两个参数 
(低,低开集或闭集);  大于某一值
   //
IDBKeyRange.upperBound()     
两个参数 
(高,高开集或闭集); 小于某一值
  //
IDBKeyRange.only()                 等于某一值
var direction = 'next';        //指定游标读取方向
var req = store.openCursor(range,direction);//打开游标
req.onsuccess = function(){     //打开游标为异步处理,打开成功时响应onsuccess方法
var cursor = this.result;
if(cursor){
showData(cursor.value);
cursor.continue();
}
}

 复合索引是一个索引指定多个索引属性,与单个索引操作类似。

















© 著作权归作者所有

共有 人打赏支持
MoranZhu
粉丝 1
博文 1
码字总数 1076
作品 0
武汉
IndexedDB:浏览器里内置的数据库

IndexedDB是HTML5规范里新出现的浏览器里内置的数据库。对于在浏览器里存储数据,你可以使用cookies或local storage,但它们都是比较简单的技术,而IndexedDB提供了类似数据库风格的数据存储...

今天来找bug
2017/10/21
0
0
IndexedDB: 浏览器里内置的数据库简介

一、概述: 所有的应用程序都需要“数据”支持。对于大多数的Web应用程序来说,数据是在服务器端进行组织和整理,然后由客户端(浏览器端)通过网络请求获取。随着浏览器的处理能力不断增强,...

今天来找bug
2017/10/21
0
0
新一代的前端存储方案--indexedDB

前端存储   我们都知道在前端开发当中,有时会因为某些需求,要将一些数据存储在前端本地当中.比如说:为了优化性能,将一些常用的数据存在本地,这样以后需要的时候直接从本地拿,不需要再向后端...

玉鸯
05/27
0
0
使用 HTML5 IndexedDB API

HTML5 的一个重要特性是本地数据持久性,它使用户能够在线和离线访问 Web 应用程序。此外,本地数据持久性使移动应用程序更灵敏,使用的带宽更少,而且能够在低带宽场景中更高效地工作。HTM...

烹饪师
2015/08/19
0
0
IndexedDB 打造靠谱 Web 离线数据库

在知乎和我在平常工作中,常常会看到一个问题: 前端现在还火吗? 这个我只想说: 隔岸观火的人永远无法明白起火的原因,只有置身风暴,才能找到风眼之所在 ——『秦时明月』 你 TM 看都不看...

前端小吉米
05/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java动态代理之InvocationHandler最简单的入门教程

网上关于Java的动态代理,Proxy和InvocationHandler这些概念有讲解得非常高深的文章。其实这些概念没有那么复杂。现在咱们通过一个最简单的例子认识什么是InvocationHandler。值得一提的是,...

JerryWang_SAP
8分钟前
0
0
oracle 在 MyBatis 中使用 like

两种使用方法 使用oracle自带 || 拼凑的方式 <if test="userName!=null and userName!=''"> AND u.USER_NAME like '%' || #{userName} || '%' </if> 使用MyBatis的$符号的方式 <if test="us......

karma123
14分钟前
0
0
带接口的webservice方式发布

package cn.it.ws.e;import javax.jws.WebService;/** * 面向接口的webservice发布方式 * @author Administrator * */@WebServicepublic interface JobService {publi...

江戸川
30分钟前
0
0
day122-20181020-英语流利阅读-待学习

蜘蛛侠新片《毒液》来袭!导演灵感来自哪? Roxy 2018-10-20 1.今日导读 你还记得漫威宇宙中飞檐走壁的蜘蛛侠小可爱吗?在刚过去的国庆黄金周里,索尼影业发行的漫威超级英雄蜘蛛侠系列大片《...

飞鱼说编程
40分钟前
3
0
美团点评Docker容器管理平台

美团点评容器平台简介 本文介绍美团点评的Docker容器集群管理平台(以下简称“容器平台”)。该平台始于2015年,是基于美团云的基础架构和组件而开发的Docker容器集群管理平台。目前该平台为...

Skqing
46分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部