Notes:indexedDB使用
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使用的更多相关文章
- 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 ...
- Android Weekly Notes Issue #237
Android Weekly Issue #237 December 25th, 2016 Android Weekly Issue #237 这是本年的最后一篇issue, 感谢大家. 本期内容包括 ...
- Android Weekly Notes Issue #230
Android Weekly Notes Issue #230 November 6th, 2016 Android Weekly Issue #230. Android Weekly笔记, 本期内容 ...
- Android Weekly Notes Issue #229
Android Weekly Issue #229 October 30th, 2016 Android Weekly Issue #229 Android Weekly笔记, 本期内容包括: 性能库 ...
- Android Weekly Notes Issue #227
Android Weekly Issue #227 October 16th, 2016 Android Weekly Issue #227. 本期内容包括: Google的Mobile Vision ...
- Android Weekly Notes Issue #221
Android Weekly Issue #221 September 4th, 2016 Android Weekly Issue #221 ARTICLES & TUTORIALS And ...
- Android Weekly Notes Issue #219
Android Weekly Issue #219 August 21st, 2016 Android Weekly Issue #219 ARTICLES & TUTORIALS Andro ...
- IndexedDB(本地存储)
var students = [{ id: 1001, name: "Byron", age: 24 }, { id: 1002, name: "Frank", ...
- HTML5存储之 indexedDB
IndexeDB是HTML5 重要的一部分,它是一种轻量级的NOSQL数据库.对创建具有丰富本地存储数据的数据密集型的离线HTML5 Web 应用程序很有用. IndexedDB是为了能够在客户端存储 ...
随机推荐
- bootstrap内置网格式布局系统:
bootstrap分为12栏,若想要一个元素占用一定的栏数的宽度,可以在这个元素上用一个特定的类,就比如说span1.span2....类. 定义的布局: 定义page-header类,在这个类当中为 ...
- Linux上mongodb开机自启动
1.下载MongoDB 2.安装MongoDB(安装到/usr/local下) .tgz mongodb cd mongodb mkdir db mkdir logs cd bin vi mongod ...
- windows下python的tar.gz文件安装
windows下下载了django,PIL,web.py发现都是tar.gz格式的文件,网上查找也非常系统的方法,总结一下其他大神的方法,归纳于此. 首先下载tar.gz文件,比如web.py,下载后 ...
- 前端页面开发,最低兼容IE 8的多设备跨平台问题解决!
项目要求: 网站能够使用PC.ipad.mobile phone正常访问 页面PSD版式宽度分别为1024px和750px 参考资料 使用CSS3 Media Queries,其作用就是允许添加表达式 ...
- jasmine入门
本文来自http://blog.fens.me/nodejs-jasmine-bdd 粉丝日志 张丹 前言TDD(Test Driven Development)测试驱动开发,是敏捷开发中提出的最 ...
- pythonchallenge 解谜 Level 2
好吧,赶紧贴一下. #-*- coding:utf-8 -*- #代码版本均为python 3.5.1 #Level 2 import re file = open("Level 2.txt ...
- tab22
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 远程桌面连接 win7 主机提示“您的凭据不工作”的解决办法
搞了大半天,找了百度N中方式操作,至少翻看10种以上解决方式,结果还是不得行 索性使用了360搜索,搜了几次就搞定了. 解决办法: “ 最重要一点, 主机上要允许用户以非guest身份登录:主机上运行 ...
- PowerDesigner连接SQL Server
以前听说过PowerDesigner可以和数据库连接,根据在PowerDesigner创建的数据模型创建表.触发器.存储过程到数据库中.也可以将已有的数据库导出到PowerDesigner中为数据模型 ...
- 【一】Ubuntu14.04+Jekyll+Github Pages搭建静态博客
本系列有五篇:分别是 [一]Ubuntu14.04+Jekyll+Github Pages搭建静态博客:主要是安装方面 [二]jekyll 的使用 :主要是jekyll的配置 [三]Markdown+ ...