indexedDB是H5规范里的浏览器内置数据库,是nosql数据库的一种。因为另一种数据库Web SQL不再受W3C支持,所以还得学习下这个。

基本情况

  1. 兼容性:ie11及以上都支持,
  2. W3C是这么说的
  3. 调试的时候个人觉得firefox最方便

示例代码

html代码:

<form>
userId:<input type="text" name="uid" id="uId"/><br/>
userName:<input type="text" name="uname" id="uName"/><br/>
email:<input type="email" name="uemail" id="uEmail"/><br/> <br/>
<input type="button" value="Add" id="addBut"/>
<input type="button" value="Delete" id="delBut"/>
<input type="button" value="Update" id="updateBut"/>
<input type="button" value="Search" id="searBut"/>
</form> <hr/> <button id='showAll'>Show All</button> <table width="60%">
<tr>
<td width="10%">uid</td>
<td width="20%">uname</td>
<td width="30%">uemail</td>
</tr>
</table> <table class="desc" width="60%">
</table>

js代码:

<script src="http://apps.bdimg.com/libs/jquery/1.9.0/jquery.min.js"></script>
<script>
$(document).ready(function () { //判断浏览器是否支持indexedDB
window.indexedDB = window.indexedDB || window.mozIndexedDB
|| window.webkitIndexedDB || window.msIndexedDB; if (window.indexedDB) { //如果支持
console.log("支持"); //创建请求打开数据库,不能直接打开。demoDB是数据库名;3是版本号。
var request = window.indexedDB.open('demoDB', 3);
var db; //onupgradeneeded事件:第一次打开页面初始化数据库时,或在当有版本号变化时调用。
request.onupgradeneeded = function (event) {
db = event.target.result;
//创建一个存储,名称为user
var objectStore = db.createObjectStore('user', {keyPath:'uid'});
// 创建一个email索引。不能有相同的 email 地址,所以使用一个 unique 索引。
objectStore.createIndex("uemail", "uemail", {unique:true});
console.log('运行onupgradeneeded... :)');
}; //成功回调
request.onsuccess = function (event) {
db = event.target.result;
console.log('创建(请求)数据库成功 :)');
}; //失败回调
request.onerror = function (event) {
console.log('创建(请求)数据库出错 :(', event);
}; } else {//如果不支持
console.log('The browser does not support indexedDB :)')
} //增
$('#addBut').click(function () {
var uidVal = $('#uId').val();
var unameVal = $('#uName').val();
var emailVal = $('#uEmail').val();
//首先需要创建一个事务,具有读写权限。在indexedDB里任何的存取对象的操作都需要放在事务里执行
var transaction = db.transaction(['user'], 'readwrite');
var objectStore = transaction.objectStore('user').add({uid:uidVal, uname:unameVal, uemail:emailVal});
transaction.oncomplete = function (event) {
console.log('新记录增加成功 :)');
};
transaction.onerror = function (event) {
console.log('新记录增加出错 :(', event);
}
}); //删
$('#delBut').click(function () {
var uidVal = $('#uId').val();
var request = db.transaction(['user'], 'readwrite').objectStore('user').delete(uidVal);
request.onsuccess = function (event) {
console.log('数据删除成功 :)');
};
request.onerror = function (event) {
console.log('删除出错 :(', event);
//console.log('删除出错 :(',event.target.errorCode);
};
}); //改
$('#updateBut').click(function () {
var uidVal = $('#uId').val();
var unameVal = $('#uName').val();
var emailVal = $('#uEmail').val();
var request = db.transaction(['user'], 'readwrite').objectStore('user').put({
uid:uidVal,
uname:unameVal,
uemail:emailVal
});
request.onsuccess = function (event) {
console.log('修改成功 :)');
};
request.onerror = function (event) {
console.log('修改出错 :(');
}
}); //查
$('#searBut').click(function () {
var uidVal = $('#uId').val();
var transaction = db.transaction(['user'], 'readwrite');
var objectStore = transaction.objectStore('user').get(uidVal);
objectStore.onsuccess = function (event) {
$('#uName').val(objectStore.result.uname);
$('#uEmail').val(objectStore.result.uemail);
console.log('查询成功 :)');
};
objectStore.onerror = function (event) {
console.log('查询出错 :(', event.target.errorCode);
}
}); //查 取出所有数据
$('#showAll').click(function () {
var str = '';
var transaction = db.transaction(['user']);
var objectStore = transaction.objectStore('user');
objectStore.openCursor().onsuccess = function (event) {
var cursor = event.target.result;
if (cursor) {
str += '<tr><td with="10%">' + cursor.key + '</td><td with="20%">' + cursor.value.uname + '</td><td with="30%">' + cursor.value.uemail + '</td></tr>';
$('.desc').html(str);
cursor.continue();
} else {
// console.log('No more datas... :(');
}
}
}); });
</script>

HTML5 使用浏览器内置数据库之 indexedDB的更多相关文章

  1. 浏览器内置Console函数使用详解

    浏览器内置Console函数比较好用:Chrome 和 FireFox(Firebug插件) 利用此功能可以像直接在面板里面运行JS一样(写法不同而已) 一.显示信息的命令 Firebug内置一个co ...

  2. 一、hive安装(内置数据库derby)

    hive是一个数据仓库工具,建立在hadoop之上,它的存在是为了让大数据的查询和分析更加的方便.hive提供简单的sql查询功能,并最终转换为mapreduce任务执行. 一.环境 JDK1.8+官 ...

  3. mysql内置数据库

    1 mysql本地连接数据库 >mysql -h localhost -u root -proot    注意-p后面没有空格,是直接跟上密码 或者 >mysql -h localhost ...

  4. 浏览器内置的base64方法

    Base64是一种基于64个可打印字符来表示二进制数据的表示方法.在Base64中的可打印字符包括字母A-Z.a-z.数字0-9,这样共有62个字符,此外两个可打印符号在不同的系统中而不同(维基百科: ...

  5. AgileBoot - 如何集成内置数据库H2和内置Redis

    本项目地址: github: https://github.com/valarchie/AgileBoot-Back-End gitee: https://gitee.com/valarchie/Ag ...

  6. 现代浏览器内置的可等效替代jQuery的功能

    jQuery的体积在不断的增大.新功能要不断增加,这是必然结果.虽然从版本1.8.3开始的瘦身效果明显,但不可否认的是,对于移动手机端的网 页开发,它仍然是不可接受的.当然,jQuery不是铁板一块, ...

  7. WeixinJSBridge:微信浏览器内置JavaScript 对象

    微信公众平台开始支持前端网页,大家可能看到很多网页上都有分享到朋友圈,关注微信等按钮,点击它们都会弹出一个窗口让你分享和关注,这个是怎么实现的呢?今天就给大家讲解下如何在微信公众平台前端网页上添加分享 ...

  8. 几种主流浏览器内置http抓包工具软件使用方法

    对于学习网站的人或者相关编程人员,经常需要用到http抓包工具来跟踪网页,但主流抓包软件如httpwatch.httpanalyzerstdv都是收费的,破解版往往也不稳定.实际上现在很多浏览器都内置 ...

  9. 几种主流浏览器内置http抓包工具软件使用方

    对于学习网站的人或者相关编程人员,经常需要用到http抓包工具来跟踪网页,但主流抓包软件如httpwatch.httpanalyzerstdv都是收费的,破解版往往也不稳定.实际上现在很多浏览器都内置 ...

随机推荐

  1. [LeetCode]223. Rectangle Area矩形面积

    /* 像是一道数据分析题 思路就是两个矩形面积之和减去叠加面积之和 */ public int computeArea(int A, int B, int C, int D, int E, int F ...

  2. java Stream学习笔记

    1.Stream与io无关. 2.Stream和用普通的循环没有太大区别,甚至时间复杂度更高,代码可读性差(通常代码行数更少). 3.流操作就是把循环要做的任务单独抽取出来,最终通过编译在一起. 来看 ...

  3. Maven仓库是什么

    Maven仓库是基于简单文件系统存储的,集中化管理Java API资源(构件)的一个服务.仓库中的任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存储路径.得益于 Maven 的坐标 ...

  4. JavaDailyReports10_05

    1 package varycode; 2 3 import java.util.ArrayList; 4 import java.util.Random; 5 6 public class Vary ...

  5. 重温Java JDK安装,希望帮助更多的学习在路上的小白

    JDK卸载和安装 现在JDK已经升级到JDK11版本了,但是JDK1.8(JDK8)仍然有很多小伙伴在使用,这里也记录一下jdk1.8的下载及安装过程,对于刚学习java的小伙伴可以参考,熟手可忽略, ...

  6. Java中常用修饰符浅谈

    一.public.protected.default和private修饰符的作用域 public:在java程序中,如果将属性和方法定义为 public 类型,那么此属性和方法所在的类和及其子类,同一 ...

  7. Docker-Docker部署SpringBoot项目

    1.手工方式 1.1.准备Springboot jar项目 将项目打包成jar 1.2.编写Dockerfile FROM java:8 VOLUME /tmp ADD elk-web-1.0-SNA ...

  8. Linux常用命令(df&dh)

    在Linux下查看磁盘空间使用情况,最常使用的就是du和df了.然而两者还是有很大区别的,有时候其输出结果甚至非常悬殊. du的工作原理 du命令会对待统计文件逐个调用fstat这个系统调用,获取文件 ...

  9. 剑指offer之重建二叉树

    1.问题描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.        例如输入前序遍历序列pre {1,2,4,7,3,5,6, ...

  10. 天梯赛练习 L3-010 是否完全二叉搜索树 (30分) 数组建树模拟

    题目分析: 本题的要求是将n个数依次插入一个空的二叉搜索树(左大右小,且没有重复数字),最后需要输出其层次遍历以及判断是否是完全二叉搜索树,通过观察我们发现, 如果这个树是用数组建立的,那么最后输出的 ...