关于使用indexedDB的本地存储(1)

这两天在复习本地存储,再一次感叹我们这些学前端的真是生活在一个幸福的时代啊~

废话不多说,本地存储的方式相信大家都知道,cookie,storage(分为sessionStorage和localStorage)还有IndexedDB

Web SQL基本上淘汰了,这里就不讨论了啊

先简要介绍一下上面几个

cookie大家都知道,对存储有限制,每组大小在4KB样的,而且每次请求服务器会增加头信息

sessionStorage是session的临时会话,存在于从页面打开到页面关闭时间,页面关闭,存储也消失

localStorage永久存储,挺好的,API简单。不过也有缺点,第一是同步读取存储,影响速度,PC端还好,移动端会比较明显。而且它只支持字符串格式,可以用JSON.stringify和JSON.parse方法使其在字符串和对象中变化,不过就问你要存一个图像你要怎么办!

IndexedDB是这篇文章的主角,异步操作,支持大量数据,缺点在于API使用比localStorage麻烦几个档次

——————————————————————————————————————————————————————————

如果我们学习Mysql,第一个需要了解的是database相关操作,现在学习IndexedDB,同样如此

1、如何建立和打开一个数据库,与其取得联系

var request = window.indexedDB.open(DBname, version);

有四个触发句柄

request.onerror = function(){}        //发生错误时

request.onsuccess = function(){}    //成功请求时

request.onupgradeneeded = function(){}    //版本变化时

request.onblocked = function(){}    //没有关闭连接还尝试连接时

2、如何删除一个库

window.indexedDB.deleteDatabase(DBname);

非常简单方便

关于调用open方法返回的request是一个IDBOpenDBRequest对象

截了一个图给大家看一下~

看到四个事件句柄了吧,现在注意下红色下划线,result属性就是我们真正请求到的DBname数据库对象

注意!!下面是文章的一些核心了,网上关于indexedDB的文章太多,如果你需要深度和思想可以去找其他真正大神的文,我这篇博文只是希望更基础和全面的了解indexedDB

让我们看图来一步步分析这个IDBDatabase对象

name就是你open时候的第一个参数DBname,四个事件句柄就不解释了相信大家英语不至于这么差

①objectStoreNames这个属性很重要,这个属性在于你数据库里面有多少个objectStore

什么,不懂objectStore?那就把它当成Mysql中的table,翻译一下就是在于你databases中有几张tables

我们的需求一般要判断这个数据库里面有没有你的objectStore,没有的话要创建一个objectSore,那该如何实现呢

看②,继承来的contains方法可以实现这个目的

request.onsuccess = function(ev){

    var db = ev.target.result;

    alert(db.objectStoreNames.contains(‘test‘));

}

这时候就知道我们的DBname数据库中有没有test这个objectStore了,有的话进行后续操作,没有的话怎么办

看③,这个就是用来新建objectStore的,而④则是删除objectStore

注意:新建objectStore需要注意不同的键类型,存储的数据结构也不同!

网上关于不同键类型存储数据结构不同这一说法,大多数都给了一个表格,我也把这一表格列出来

不知道大家看懂了没有,我把我所测试出来的给大家看,这也是我写博文的目的,我写的东西,一定是我经过测试的,绝不是在网上照搬照抄的

一个很简单的布局,三个按钮显示的功能分别是save将五个number和name保存,update将IndexedDB里面的值去出来并丢到表单里,clear清空数据库

因为这里是测试新建一个objectStore不同键类型所带来的影响,所以只需要关注save就可以了

①db.createObjectStore(‘students‘, {keyPath: "number",);

②db.createObjectStore(‘students‘, {keyPath: "number", autoIncrement: true});

③db.createObjectStore(‘students‘, {keyPath: "number", autoIncrement: false});

④db.createObjectStore(‘students‘, {autoIncrement: false});

⑤db.createObjectStore(‘students‘, {autoIncrement:true});

a)存入每个对象都有number属性时,成功~

b)一旦存入的某个对象没有number属性时,意味着无法找到键值,会报错

我在这里采取的方法是存入前两个对象只有name属性,是这样的:{name: aa},{name: bb},而剩下三个是这样的{number: 33, name: cc},华丽丽的报错了

②如果keyPath和autoIncrement同时使用的话会怎么样呢,还是前两个对象数据没有number属性,看图~

它对自己适应选择autoIncrement还是根据本身的number作为键值,注意autoIncrement产生的数值付给了存储对象value的number哦

再来看看③,其实③中autoIncrement为false就等于①!!

报错不解释,错误类型都一样,我就不贴图了

再看④,仍然报错,和不写参数报的是一样的错

⑤,这个应该是最好理解的吧,简简单单的自增长

好了,这是我所测试出来的几种情况,不知道有没有不完善之处,希望路过的大神大牛们将不妥之处点出,万分感谢~

然后是删除objectStore,这经过我测试……也是有坑的存在,不过下篇在说,这篇写累死我了~

时间: 2024-11-10 18:02:40

关于使用indexedDB的本地存储(1)的相关文章

HTML5 indexedDB前端本地存储数据库实例教程 (转载)

一.indexedDB为何替代了Web SQL Database? 跟小朋友的教育从来没有什么“赢在起跑线”这种说法一样,在前端领域,也不是哪来先出来哪个就在日后引领风骚的. HTML5 indexedDB和Web SQL Database都是本地数据库数据存储,Web SQL Database数据库要出来的更早,然并卵.从2010年11月18日W3C宣布舍弃Web SQL database草案开始,就已经注定Web SQL Database数据库是明日黄花. 未来一定是indexedDB的,从

关于使用indexedDB的本地存储(2)

我又回来了~这几天估计没喝茶,每天头都晕晕的,昨晚上和室友看了素鸡7,伤心啊,自己一直都喜欢这个系列,感觉童年真的是渐行渐远了…… 上一篇说到了哪些内容我这里罗列一下 建立和打开数据库.删除数据库.判断objectStore是否存在和建立一个不同键类型的objectStore,此时发现内容好少啊,大部分都是在测试,不过我觉得详细的测试还是很重要的. 说完了建立一个objectStore,现在我们来说删除一个objectStore,经过我的测试,这个也是有坑的存在,删除objectStore必须是

HTML5本地存储IndexedDB基础使用

做项目时需要用H5本地存储,感觉还不错 下面是一些基础知识和一个完整的实例 HTML5 的一个重要特性是本地数据持久性,它使用户能够在线和离线访问 Web 应用程序.此外,本地数据持久性使移动应用程序更灵敏,使用的带宽更少,而且能够在低带宽场景中更高效地工作.HTML5 提供了一些本地数据持久性选项.第一个选项是 localstorage,它支持您使用一个简单的键值对来存储数据.IndexedDB(一个更加强大的选项)支持您本地存储大量对象,并使用健壮的数据访问机制检索数据. IndexedDB

html5本地存储之indexedDb

对于以下需求: 离线存储读取数据 允许用户对数据进行增删改操作 数据存储在本地,不依赖后端 数据支持索引查询 我们可以考虑使用html5新特性的本地存储,主要有以下几种: Web Sql(IE,FF都不支持,http://www.w3.org/TR/webdatabase/) IndexedDB Local Storage(轻松存储简单的数据结构,如果存储复杂的较麻烦) Session Storage(同Localstorage) Cookies(有限制) Application Cache(随

cookie本地存储

本地存储 所谓的本地存储,其实就是把一些信息,存储到客户端版本地,存储的信息不会因为页面的跳转或关闭而消失,这样就可以实现很多功能需求了. 特点 虽然是存储到本地了,但是有浏览器中间的访问限制,例如:谷歌下存储的信息在IE中访问不到 还会存在域名和域名之间的访问限制,例如:在谷歌下访问京东,存储了京东的客户信息,当我们用谷歌浏览器打开了百度,百度是无法获取原来在京东下存储的本地信息的 本地存储应用的案例: 登录的时候,记住用户名和密码,其实就是把信息存储到客户端本地,下一次再打开页面的时候,直接

常用的本地存储-----cookie篇

1.引言 随着浏览器的处理能力不断增强,越来越多的网站开始考虑将数据存储在「客户端」,那么久不得不谈本地存储了. 本地存储的好处: 一是避免取回数据前页面一片空白,如果不需要最新数据也可以减少向服务器的请求次数,从而减少用户等待从服务端获取数据的时间. 二是网络状态不佳时仍可以显示离线数据. 2.本地存储 用chrome浏览器打开一个网页,F12进入开发者模式,点击Application,我们可以看到: 以上的Local Stroage . Session Stroage . IndexedDB

[转]Dcloud App离线本地存储方案

原文地址:http://ask.dcloud.net.cn/article/166 HTML5+的离线本地存储有如下多种方案:HTML5标准方案:cookie.localstorage.sessionstorage.websql.indexedDBHTML5Plus扩展方案:plus.storage.plus.io cookie体量最小,可以设置过期时间. localstorage适合key.value键值对的存储,数据量一般不超过5M.是常用的轻量数据存储方案. sessionstorage也

HTML5新增核心工具——本地存储

除了Canvas元素外,HMTL5另外一个新增的非常重要的功能是可以在客户端本地存储数据库的Web Storage.本文就介绍下Web Storage以及SQLLite操作. Web Storage分为两类: - sessionStorage:数据保存在session 对象中(临时) - localStorage:数据保存在本地硬件设备中(永久) sessionStorage: 保存数据的两种方法: sessionStorage.setItem('key','val'); sessionStor

HTML5本地存储localStorage与sessionStorage

在最近的项目中用到了html5的本地存储,下面总结一下. 1.html5几种存储形式 本地存储(localStorage && sessionStorage) 离线缓存(application cache) indexedDB 和 webSQL 2.localStorage && sessionStorage 过期时间:localStorage 永久存储,永不失效除非手动删除 sessionStorage 浏览器重新打开后就消失了 大小:每个域名是5M. 注:cookie一