HTML5 使用浏览器内置数据库之 indexedDB

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

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>HTML5 indexedDB</title>
		<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) { //如果支持
				//创建请求打开数据库,不能直接打开。demoDB是数据库名;3是版本号。
				var request = window.indexedDB.open('demoDB',3);
				var db;
				//onupgradeneeded事件:第一次打开页面初始化数据库时,或在当有版本号变化时调用。
				request.onupgradeneeded = function(event){
					db = event.target.result;
					var objectStore = db.createObjectStore('user',{keyPath:'uid'});
					// 创建一个email索引。不能有相同的 email 地址,所以使用一个 unique 索引。
					objectStore.createIndex("uemail", "uemail", {unique: true});
					console.log('运行onupgradeneeded... :)');
				}
				//onsuccess事件:成功时调用。
				request.onsuccess = function(event){
					db = event.target.result;
					console.log('创建(请求)数据库成功 :)');
				};
				//onerror事件:出错时调用。
				request.onerror = function(event){
					console.log('创建(请求)数据库出错 :(',event);
				};
			} else {				//如果不支持
				alert('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){
					alert('新记录增加成功 :)');
				};
				transaction.onerror = function(event){
					alert('新记录增加出错 :(',event);
					//console.log('新记录增加出错 :(',event);					
				}
			});

			//取出所有数据
			$('#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 {
						//alert('No more datas... :(');
					}
				}
			});
			
			//删除数据
			$('#delBut').click(function(){
				var uidVal = $('#uId').val();
				var request = db.transaction(['user'],'readwrite').objectStore('user').delete(uidVal);
				request.onsuccess = function(event){
					alert('数据删除成功 :)');
				};
				request.onerror = function(event){
					alert('删除出错 :(',event);
					//console.log('删除出错 :(',event.target.errorCode);					
				};
			});
			
			//查询 
			$('#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);
				}
			});
			
			//修改
			$('#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){
					alert('修改成功 :)');
				};
				request.onerror = function(event){
					alert('修改出错 :(');
				}
			})
			
		});
	</script>		
	</head>
	<body>
		
		<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%"><t
			<tr><td width="10%">uid</td><td width="20%">uname</td><td width="30%">uemail</td></tr>
		</table>
		<table class="desc" width="60%">
			
		</table>
		
	</body>
</html>

W3C是这么说的:

http://www.w3.org/TR/IndexedDB/

其它的学习参考:

http://www.cnblogs.com/smileberry/p/3844269.html

http://www.tfan.org/using-indexeddb/#i-9

http://www.ibm.com/developerworks/cn/web/wa-indexeddb/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值