indexedDB是浏览器端保存结构化数据的一种数据库,类似于mysql,oracle等数据库,但indexedDB使用对象存储数据,而不是用表。

indexedDB是全局的宿主对象,使用window.indexedDB即可调用。

要使用indexDB数据库,首先得打开它,使用open方法,可以给该方法指定数据库名与版本号,如该数据库存在则发送一个打开它的请求,如不存在则创建一个数据库并打开它的请求。该方法返回一个IDBRequest对象

var request = indexedDB.open('1yyg',1),
db = null;
request.onerror = function(e){
console.log(e);
};
request.onsuccess = function(e){
db = this.result;
}
request.onupgradeneeded=function(e){
db = this.result;
if(!db.objectStoreNames.contains('users')){
var usrObjStr = db.createObjectStore('users',{keyPath:'id',autoIncrement:!0});
users.forEach(function(ele,idx,arr){
usrObjStr.add(ele);
});
}
}

传递版本号时不能低于当前的版本号,否则报错;大于当前版本号时则会触发upgradeneeded事件。

删除数据库,使用deleteDatabase方法,该方法也是返回一个IDBRequest对象,监听该对象的error和success事件便可知道删除是否成功

var delRequest = window.indexedDB.deleteDatabase('1yyg');

    delRequest.onerror = function(e){
console.log('delete failure');
}; delRequest.onsuccess = function(e){
console.log('delete successfully');
};

IDBRequest对象有一个result属性,该属性保存着IDBDatabase对象的引用,有了该对象就可以对数据库进行CURD操作了。

1、创建存储空间出,类似于表的概念,,使用createObejctStore必须在versionchange transaction时使用:

var usrObjStr = db.createObjectStore('users',{keyPath:'id',autoIncrement:!0});
//使用createObjectStore创建存储空间时,需要指定一个keyPath,该值是空间中将要保存的对象的一个属性,而这个属性将作为
存储空间的键来使用。

2、检查某个存储空间是否存在

db.objectStoreNames.contains('users');
//使用objectStoreNames获取当前数据库的所有存储空间的名字

3、删除存储空间,使用deleteObejctStore必须在versionchange transaction时使用

request.onupgradeneeded=function(e){
db = this.result;
if(!db.objectStoreNames.contains('users')){
var usrObjStr = db.createObjectStore('users',{keyPath:'id',autoIncrement:!0});
users.forEach(function(ele,idx,arr){
usrObjStr.add(ele);
});
}
db.deleteObjectStore('users');
}

4、使用IDBObjectStore对象进行数据插入、查询、删除等操作,都是基于IDBDatabase对象的transaction来做的,首先得使用transaction方法得到IDBTransaction对象,接着使用该对象的obejctStore方法获取具体存储空间的IDBObjectStore对象,然后

就可以进行各种操作了。

查询数据,

var keyBound = IDBKeyRange.lowerBound(1,!0)
var transaction = db.transaction(['users'],'readwrite');
//transaction方法第一个参数是指定objectStoreName,可以使用数组指定多个,也可以直接使用字符串只指定一个,第二个参数是事务的模式,有 readonly, readwrite等
var usrObjStr = transaction.objectStore('users');
//使用objectStore方法选中具体的存储空间
var resRequest = usrObjStr.get(keyBound);
resRequest.onsuccess = function(e){
console.log(resRequest.result);
}

添加数据,使用add和put方法,区别的是添加重复数据时,前者报错,后者重写

var resRequest = usrObjStr.add({name:'nihaoma',age:20});
resRequest.onsuccess = function(e){
console.log(resRequest.result);
}
resRequest.onerror = function(e){
console.log('fail');
}

删除数据,删除id大于1的所有数据

    var keyBound = IDBKeyRange.lowerBound(1,!0)
var transaction = db.transaction(['users'],'readwrite');
var usrObjStr = transaction.objectStore('users'); var resRequest = usrObjStr.delete(keyBound);
resRequest.onsuccess = function(e){
console.log('delete success');
}

删除所有数据可以使用clear方法

        var transaction = db.transaction(['users'],'readwrite');
var usrObjStr = transaction.objectStore('users'); var resRequest = usrObjStr.clear();
resRequest.onsuccess = function(e){
console.log(resRequest.result);
}

统计所有记录条数,使用count方法

var transaction = db.transaction(['users'],'readwrite');
var usrObjStr = transaction.objectStore('users'); var resRequest = usrObjStr.count();
resRequest.onsuccess = function(e){
console.log(resRequest.result);
}

使用游标查询,使用openCursor方法,

var transaction = db.transaction("name", "readonly");
var objectStore = transaction.objectStore("name");
var request = objectStore.openCursor();
request.onsuccess = function(event) {
var cursor = event.target.result;
if(cursor) {
console.log(cursor.value);
cursor.continue();
} else {
// no more results
}
};

Notes:indexedDB使用的更多相关文章

  1. ASP.NET Core 1.1.0 Release Notes

    ASP.NET Core 1.1.0 Release Notes We are pleased to announce the release of ASP.NET Core 1.1.0! Antif ...

  2. Android Weekly Notes Issue #237

    Android Weekly Issue #237 December 25th, 2016 Android Weekly Issue #237 这是本年的最后一篇issue, 感谢大家. 本期内容包括 ...

  3. Android Weekly Notes Issue #230

    Android Weekly Notes Issue #230 November 6th, 2016 Android Weekly Issue #230. Android Weekly笔记, 本期内容 ...

  4. Android Weekly Notes Issue #229

    Android Weekly Issue #229 October 30th, 2016 Android Weekly Issue #229 Android Weekly笔记, 本期内容包括: 性能库 ...

  5. Android Weekly Notes Issue #227

    Android Weekly Issue #227 October 16th, 2016 Android Weekly Issue #227. 本期内容包括: Google的Mobile Vision ...

  6. Android Weekly Notes Issue #221

    Android Weekly Issue #221 September 4th, 2016 Android Weekly Issue #221 ARTICLES & TUTORIALS And ...

  7. Android Weekly Notes Issue #219

    Android Weekly Issue #219 August 21st, 2016 Android Weekly Issue #219 ARTICLES & TUTORIALS Andro ...

  8. IndexedDB(本地存储)

    var students = [{ id: 1001, name: "Byron", age: 24 }, { id: 1002, name: "Frank", ...

  9. HTML5存储之 indexedDB

    IndexeDB是HTML5 重要的一部分,它是一种轻量级的NOSQL数据库.对创建具有丰富本地存储数据的数据密集型的离线HTML5 Web 应用程序很有用. IndexedDB是为了能够在客户端存储 ...

随机推荐

  1. HTML5 与 CSS3 jQuery部分知识总结【转】

    一.    HTML5 为什么需要HTML5 什么是HTML5 HTML5现状及浏览器支持 HTML5优点与缺点 HTML5语法规则与文档声明 HTML5新增表达标签 HTML5多媒体组件 HTML5 ...

  2. Windows服务安装

    运行cmd 输入:cd C:\Windows\Microsoft.NET\Framework\v4.0.30319  按回车 输入安装服务路径:如(installutil.exe D:\Project ...

  3. @Autowired

    1. Spring框架中进行注入式,使用@Autowired. @Autowired可以对成员变量.方法和构造函数进行标注,来完成自动装配的工作,这里必须明确:@Autowired是根据类型进行自动装 ...

  4. xampp常见安装失败问题

    遇到这两个错误后不管它,继续安装.完成后下载Microsoft Visual C++ 2008 Redistributable Package (x86),可以到这里下载:Microsoft Visu ...

  5. mysql数据库导出模型到powerdesigner,PDM图形窗口中显示数据列的中文注释

    1,mysql数据库导出模型到powerdesigner 2,CRL+Shift+X 3,复制以下内容,执行 '******************************************** ...

  6. HDU(1285)—确定比赛名次

    /*最近都在复习期末了...好久没做题,都快没智商了*/   有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后 ...

  7. BSBuDeJie_04

    一 段子的下拉 建立模型 数字类型的用assign /* 当前页码 */ @property (nonatomic, assign) NSInteger page; 二 下拉上拉细节处理 三 细节处理 ...

  8. 一鼓作气 博客--第三篇 note3

    1 推荐读书消费者行为学 -商业的本质,APP得到,5分钟商学院 2定义字典 dic={'name':haibao,'age':18} 3字典的基本操作--查询 dic={'name':'haibao ...

  9. TreeView 使用方法:(在View.Details模式下)

    1.建立TreeView的標題         2.建立TreeView的Item         3.在TreeView的Item中的建立SubItem                  如果將各部 ...

  10. 面试题系列——OSI七层模型

    OSI(开放式系统互联模型)是一个开放性的通行系统互连参考模型,是一个协议规范.它把网络协议从逻辑上分了七层,每一层都有对应的物理设备. OSI七层模型是一种框架性的设计方法,设计的主要目的是为了解决 ...