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,可以使用数组指定多个,也可以直接使用字符串只指定一个,第二个参数是事务的模式,有 readonlyreadwrite等
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
}
};

最新文章

  1. jQuery幻灯片插件autoPic
  2. NOIp #2009
  3. docker存储结构解析
  4. DB2 错误信息码
  5. 环信webim1.1.2版本在windows下npm环境搭建错误解决
  6. iOS开发系列--扩展--播放音乐库中的音乐
  7. Linux rsync 同步
  8. BZOJ3681: Arietta
  9. 浅谈用java解析xml文档(四)
  10. 对 HTTP 304 的理解(转)
  11. Python 可变对象和不可变对象
  12. onclick事件
  13. (2012年旧文)纪念史蒂夫乔布斯---IT界的普罗米修斯
  14. hdu 4915 Parenthese sequence 多校第五场
  15. Docker Hub工作流程-Docker for Web Developers(6)
  16. win32SDK的hello,world程序(二)
  17. 第二次项目冲刺(Beta阶段)5.24
  18. STL源码剖析之序列式容器
  19. 探索C++多态和实现机理
  20. MIP技术进展月报第3期:MIP小姐姐听说,你想改改MIP官网?

热门文章

  1. ubuntu install eclipse-installer
  2. 第一天---HTML基础学习
  3. css3媒体查询实现网站响应式布局
  4. 在发送ajax请求时加时间戳或者随机数去除js缓存
  5. centos7安装mysql5.7
  6. C#上位机制作之串口接受数据(利用接受事件)
  7. PHP的输出缓冲区(转)
  8. 无参数实例化Configuration对象以及addResource无法加载core-site.xml中的内容
  9. ajax优点与缺点
  10. 谷歌发布的首款基于HTTP/2和protobuf的RPC框架:GRPC