IndexedDB的JS接口设计详解

接下来介绍IndexedDB(以下简称IDB)的JS接口设计

 

 

如图所示,我们按照操作过程,把IDB的接口分成三部分来介绍:

1.初始化数据库连接

2.在数据库中建表

3.在表中存取数据

初始化数据库连接

  1. var req = window.IndexedDB.open(dbName, dbVersion);  
  2. req.onsuccess = function (e) {...}  
  3. req.onupgradeneeded = function (e) {...}  
  4. req.onerror = function (e) {...} 

这里有两个重要的参数,dbName是数据库的名称,dbVersion是数据库的“版本”。第2个参数“版本”可能不太好理解,IDB不允许数据库中的表在同一个版本中发生变化,所以当我们创建新表或删除旧表的时候,必须使用一个不一样的版本号。他的作用在于避免重复修改数据库的表结构。默认的版本是空字符串””,我们在使用时,可以使用”1.0″。如果请求中的版本号和当前数据库的版本号相同,则会触发onsuccess事件,如果版本号不同,则会触发onupgradeneeded事件,我们在这一事件中可以对数据库的表结构进行修改,然后再触发onsuccess事件。

在数据库中建表

  1. req.onupgradeneeded = function (e) {  
  2.     var db = req.result;  
  3.     vardb.createObjectStore(storeName, optionParameters);  
  4. }; 

之前提到了,当被访问的数据库版本号需要发生改变时,onupgradeneeded事件会被触发,我们就从这个事件继续说起。通过req.result我们可以得到当前的数据库对象db。db有一个方法createObjectStore,是专门用来创建表的。***个参数是表的名称,第二个参数是可选的,它决定了我们要创建的表是内联关键字还是外部关键字,关键字是否需要自动生成,代表这两个设置的字段分别是keyPath和autoIncrement。比如,当第二个参数是

  1. {keyPath: 'profile.id', autoIncrement: false} 

时,说明这个表采用内联关键字,且keyPath是profile.id,同时关键字不是自增的,需要每次插入数据时手动设定;当第二个参数是

  1. {autoIncrement: true} 

时,说明这个表采用外部关键字,并且关键字是自增的。

同样的,我们可以在onupgradeneeded事件中删除一个表,方法是db.deleteObjectStore(storeName)。道理很简单,就不展开论述了。

在表中存取数据

  1. req.onsuccess = function (e) {  
  2.     var db = req.result;  
  3.     var transaction = db.transaction(storeNames, mode);  
  4.     var store = transaction.objectStore(storeName);  
  5.     var subReq = store.add(value, key);  
  6.     // var subReq = store.get(key);  
  7.     // var subReq = store.delete(key);  
  8.     // var subReq = store.clear();  
  9.     subReq.onsuccess = function (e) {  
  10.         console.log(subReq.result);  
  11.     };  
  12. }; 

对表中数据的存取通常是在onsuccess事件之后进行的。同样的,我们可以通过req.result获取数据库对象db,并随时通过db进行各种存取数据的操作。

上一篇文章提到了,所有的数据库操作都是在事务(transaction)中进行的,具体代码格式是这样的:

***句,先创建一个transaction,两个参数分别是会涉及到的表的名字和读写模式,表的名字可以是数据也可以是字符串,如”users”或[“users”, “articles”],读写模式可以是IDBTransaction.READ_ONLY或IDBTransaction.READ_WRITE。

第二句,用transaction对象获取一个表,需要传入的参数是表的名称。

第三句及其后面的四句注释掉的代码,分别是我们可以利用store这个对象进行的基本的表操作——添加数据、获取数据、删除数据、清空表。参数也都很好理解,有一个要注意的地方是,添加数据时,key是可选项,如果我们已经在表里定义了keyPath或表本身有自增关键字,则key是不需要写的。

***,如***篇文章所说,这些操作是异步进行的,想获得操作的结果,可以在subReq.onsuccess事件中,通过访问subReq.result获取操作结果。添加操作的操作结果是关键字,获取数据的操作结果是对象的值,删除操作和清空操作无需返回结果。

上述介绍是IDB的一些基本操作,我刻意省略掉了IDB中的遍历、索引以及对各种出错异常的处理。为的是给大家一个直观的印象,用了上面的接口,我们起码可以做到一件事,就是想使用localStorage一样通过键值对来存取json对象。

下一篇文章,会进一步介绍遍历操作,并结合firefox 10对IndexedDB的支持情况做一个简单的demo。

【系列文章】

  1. 浅析IndexedDB存数结构
  2. 调试IndexedDB应用程序

原文:http://bulaoge.net/topic.blg?dmn=g3g4&tid=2330716#Content

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/297243.html<

赞 (0)
管理的头像管理
上一篇2025-05-22 09:25
下一篇 2025-05-22 09:26

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注