资讯专栏INFORMATION COLUMN

IndexedDB

AlienZHOU / 2758人阅读

摘要:对象存储对象存储相当于保存数据的桶。其思想是每个需要持久化的数据类型都有一个对象存储。对象存储只能在事件处理期间创建。创建对象存储要创建对象存储,首先应该检查它是否存在。定义主键在对象存储中,每条数据都必须有一种能够唯一标识自己的方式。

IndexedDB是一个功能强大且高度灵活的存储系统,你可以使用它在用户浏览器中存储你希望存储的任何数据。不过,出色的功能和灵活性致使其API不像Web存储那么友好。你还会发现,移动端浏览器对IndexedDB的支持还不是很友好,即使支持。

IndexedDB关键术语 数据库

IndexedDB的最上层是数据库的概念。

对象存储

对象存储相当于保存数据的桶。如果你使用过传统的关系型数据库,则可以将对象存储想象成一张表。但是IndexedDB可以更灵活地存储数据。

索引

索引是一种从对象存储中检索数据的方式。

使用数据库

创建数据库时,需要提供一个名称和版本。数据库结构(指对象存储和索引,而不是实际数据本身)只能在更改版本时临时调整。
在IndexDB中,你所做的所有操作都是异步的。因此,打开数据库并不意味着立即就可以使用,而是需要在响应一个事件之后才可以使用。打开数据库操作可以触发的事件包括success、error、upgradeneeded和blocked.
其中upgradeneeded在用户首次访问数据库或者版本号发生变化时出发,这是设置数据结构的地方。bloced在数据库不可用或者无法使用时被触发。

function idbOK(){
    return "indexedDB" in window;
}
$(documengt).ready(function() {
    if(!idbOK) return;
    var openRequest = indexedDB.open("ora_idb1", 1);
    openRequest.onsuccess = function(e) {
        var db = e.target.result;
    }
});

上述代码中,首先检查浏览器是否支持IndexedDB。如果支持,则使用indexedDB.open方法打开数据库。第一个参数是数据库名称。由于一个IndexedDB数据库只提供给一个网站使用,因此不用担心该名称和其他数据库的名称相冲突。

使用对象存储

前面说过,indexedDB对象存储有点像SQL数据库表。它应该只包含一种“类型”的数据,比如"people""notes"或其他对象的实例。其思想是每个需要持久化的数据类型都有一个对象存储。
对象存储只能在upgradeneeded事件处理期间创建。假设你设计的数据库支持两种对象存储。数据之后,你又决定存户第三种类型的数据。你需要做两件事:第一,更改版本号;第二,编写代码,增加新的对象存储。

创建对象存储

要创建对象存储,首先应该检查它是否存在。可以利用数据库变量(从打开数据库操作的事件处理器获得)访问objectStoreNames属性。该属性是一个DOMStringList实例,你可以查看它是否已经包含了某个值。如果没有,则可以调用createObjectStore("name", options)方法创建对象存储。

openRequest.onupgradeneeded = function(e) {
    var thisDB = e.target.result;
    if(!thisDB.objectStoreNames.contains("firstOS")) {
        thisDB.createObjectStore("firstOS");
    }
}
定义主键

在对象存储中,每条数据都必须有一种能够唯一标识自己的方式。在定义对象存储时,你可以定义如何唯一地标识数据。
实际上,主要有两种定义方式。一种是定义一个key path,它本质上是一个永远存在并且包含唯一信息的属性。另一种是使用key generator,它本质上是一种生成唯一值的方式。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/107550.html

相关文章

  • 初探IndexedDB

    背景 随着前端技术日新月异地快速发展,web应用功能和体验也逐渐发展到可以和原生应用媲美的程度,前端缓存技术的应用对这起到了不可磨灭的贡献,因此想一探前端的缓存技术,这篇文章主要会介绍在日常开发中比较少接触的IndexedDB IndexedDB 什么是IndexedDB IndexedDB简单理解就是前端数据库,提供了一种在用户浏览器中持久存储数据的方法,但是和前端关系型数据不同的是,Index...

    jsyzchen 评论0 收藏0
  • IndexedDB使用与出坑指南

    摘要:在不指定的情况下,默认版本号为。具体示例如下在需要更新数据库的模式时,需要更新版本号。此时我们指定一个高于之前版本的版本号,就会触发事件。数据操作事务在中,我们也能够使用事务来进行数据库的操作。 概述 本文通过对IndexedDB的使用方法和使用场景进行相关介绍,对常见的问题进行解答。 同时,因为MDN中的相关文档缺乏相关逻辑性,所以不容易理解。本文将通过项目中常见的数据存储和操作需求...

    陈伟 评论0 收藏0
  • indexedDB入门

    摘要:概述是一个事务型数据库系统,类似于基于的。然而不同的是它使用固定列表,是一个基于的面向对象的数据库。参考文档浏览器数据库入门教程 概述 IndexedDB 是一个事务型数据库系统,类似于基于 SQL 的 RDBMS。 然而不同的是它使用固定列表,IndexedDB 是一个基于 JavaScript 的面向对象的数据库。现有的浏览器数据储存方案,都不适合储存大量数据:Cookie 的大小...

    awesome23 评论0 收藏0
  • HTML5 进阶系列:indexedDB 数据库

    摘要:版本号必须为整数更新版本,打开版本为的数据库新数据库版本号为我们通过监听请求对象的事件来定义数据库版本更新时执行的方法。 前言 在 HTML5 的本地存储中,有一种叫 indexedDB 的数据库,该数据库是一种存储在客户端本地的 NoSQL 数据库,它可以存储大量的数据。从上篇:HTML5 进阶系列:web Storage ,我们知道 web Storage 可以方便灵活的在本地存取...

    philadelphia 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<