html5的indexedDB数据库操作实例

StringUtil.js

//去除字符串中間空格 
String.prototype.Trim = function() { 
	return this.replace(/(^s*)|(s*$)/g, ""); 
};
//去除字符串左側空格 
String.prototype.LTrim = function() { 
	return this.replace(/(^s*)/g, ""); 
};
//去除字符串右側空格 
String.prototype.RTrim = function() { 
	return this.replace(/(s*$)/g, ""); 
};
//去除字符串中所有空格(包括中間空格,需要設置第2個参數为:g) 
function Trim(str,is_global){ 
	var result; 
	result = str.replace(/(^s+)|(s+$)/g,""); 
	if(is_global.toLowerCase()=="g") 
	result = result.replace(/s/g,""); 
	return result; 
};

indexedDB.js

window.onload = function(){
	if(!window.indexedDB){
		window.indexedDB = window.mozIndexedDB || window.webkitIndexedDB;
	}
	
	var db = null;
	var request = indexedDB.open("mydb");
	request.onupgradeneeded = function(e){
		//db = request.result;
		db = e.target.result;
		createObjectStore(db);
	}
	
	function createObjectStore(db){
		if(db.objectStoreNames.contains("customer")){
			db.deleteObjectStore("customer");
		}
		
		var objectStore = db.createObjectStore("customer",{keyPath:"id",autoIncrement:true});
		
		objectStore.createIndex("name","name",{unique:false});
		objectStore.createIndex("email","email",{unique:true});
		
		objectStore.add({name: "Tom", sex: "male", age: 34, email: "[email protected]"});
		objectStore.add({name: "Jiny", sex: "female", age: 25, email: "[email protected]"});
		objectStore.add({name: "Liam", sex: "male", age: 23, email: "[email protected]"});
	}
	
	request.onsuccess = function(e){
		db = e.target.result;
		if(!db.version=="1.0"){
			var request = db.setVersion("1.0");
			request.onsuccess = function(e){
				createObjectStore(db);
				showDataByCursor();
			}
			request.onerror = function(e){
				alert(e);
			}
		}else{
			showDataByCursor();
		}
	}
	
	function showDataByCursor(objectStore){
		if(!objectStore){
			var transaction = db.transaction(["customer"]);
			objectStore = transaction.objectStore("customer");
		}
		console.log("Store-Name : "+objectStore.name);
		console.log("Store-KeyPath : "+objectStore.keyPath);
		
		var request = objectStore.openCursor();
		request.onsuccess = function(e){
			var cursor = e.target.result;
			if(cursor){
				console.log(cursor.key);
				console.log(cursor.value);
				var data = cursor.value;
				data.id = cursor.key;
				showInTable(data);
				cursor.continue();
			}
		}
		request.onerror = function(e){
			console.log("ERROR");
		}
	}
	
	var table = document.getElementsByTagName("table")[0];
	function showInTable(data){
		//table.childNodes
		var tbody = table.children[1];
		//tbody = document.getElementsByTagName("tbody")[0];
		var tr = document.createElement("tr");
		var td_id = createTd(data,"id")
		var checkBox=document.createElement("input");
		checkBox.setAttribute("type","checkbox");
		checkBox.setAttribute("name","check");
		var textNode = td_id.childNodes[0];
		checkBox.setAttribute("id",textNode.nodeValue);
		//td_id.removeChild(textNode);
		td_id.appendChild(checkBox);
		//td_id.appendChild(textNode);
		tr.appendChild(td_id);
		var td_name = createTd(data,"name");
		tr.appendChild(td_name);
		var td_sex = createTd(data,"sex");
		tr.appendChild(td_sex);
		var td_age = createTd(data,"age");
		tr.appendChild(td_age);
		var td_email = createTd(data,"email");
		tr.appendChild(td_email);
		tbody.appendChild(tr);
	}
	
	function createTd(data,key){
		var td = document.createElement("td");
		td.contentEditable = "true";
		var namedNodeMap = td.attributes;
		var attrKey = document.createAttribute("key");
		attrKey.value = key;
		namedNodeMap.setNamedItem(attrKey);
		var attrValue = document.createAttribute("value");
		attrValue.value = data[key];
		namedNodeMap.setNamedItem(attrValue);
		var attrType = document.createAttribute("type");
		attrType.value = typeof(data[key]);
		namedNodeMap.setNamedItem(attrType);
		td.innerText = data[key];
		td.onblur = function(event){
			console.log(this.parentNode.firstElementChild.innerText);
			console.log(this.innerText.LTrim().RTrim());
			console.log(this.attributes["value"].value);
			console.log(this.attributes["key"].value);
			console.log(this.innerText);
			if(this.attributes["value"].value != this.innerText.LTrim().RTrim()){
				 saveOrUpdate(event.target);	//或saveOrUpdate(this)
			}
		}
		return td;
	}

	function saveOrUpdate(obj){
		var id = obj.parentNode.firstElementChild.innerText;
		var transaction = db.transaction(["customer"],"readwrite");
		var objectStore = transaction.objectStore("customer");
		
		var request = objectStore.get(parseInt(id));
		//var range = IDBKeyRange.only("Donna");
		//var request = objectStore.index("name").openCursor(range);
		request.onsuccess = function(event){
			if(event.target.result){
				//objectStore.delete(id);
				var data = event.target.result;
				console.log("Update : " + data);
				var value = obj.attributes["type"].value=="number"?parseInt(obj.innerText):obj.innerText;
				data[obj.attributes["key"].value] = value;
				var updateRequest = objectStore.put(data);
				updateRequest.onsuccess = function(event){
					//console.log(event.target);
					console.log("UPDATE SUCCESS");
				}
				updateRequest.onerror = function(event){
					console.log("UPDATE ERROR");
				}
			}else{
				var data = {};
				var tds = obj.parentNode.children;
				for(var i=0;i<tds.length;i++){
					var td = tds[i];
					var key = td.attributes["key"].value;
					data[key] = td.attributes["type"].value=="number"?parseInt(td.innerText):td.innerText;
				}
				console.log("Add : " + data);
				var saveRequest = objectStore.add(data);
				saveRequest.onsuccess = function(){
					console.log("SAVE SUCCESS");
				}
				saveRequest.onerror = function(){
					console.log("SAVE ERROR");
				}
			}
		};
		request.onerror = function(event){
			alert(event);
		};
	}
	
	/*搜索*/
	var name = document.getElementsByName("name")[0];
	var email = document.getElementsByName("email")[0];
	var select = document.getElementsByTagName("button")[0];
	select.onclick = function(event){
		var value_name = name.value.LTrim().RTrim();
		var value_email = email.value.LTrim().RTrim();
		
		var transaction = db.transaction(["customer"],"readonly");
		var objectStore = transaction.objectStore("customer");
		
		var tbody = table.children[1];
		var elements = tbody.children;
		//var i=0;
		while(elements.length > 0){
			tbody.removeChild(elements[0]);
		}
		if(value_name=="" && value_email==""){
			var request = objectStore.openCursor();
			request.onsuccess = function(event){
				var cursor = event.target.result;
				if(cursor){
					showInTable(cursor.value)
					cursor.continue();
				}
				console.log("GETALL SUCCESS");
			};
			request.onerror = function(event){
				console.log(event.target);
				console.log("GETALL ERROR");
			};
		}else{
			if(value_name!=""){
				var range = IDBKeyRange.only(value_name);
				var request = objectStore.index("name").openCursor(range);
				request.onsuccess = function(event){
					
					var cursor = event.target.result;
					if(cursor){
						console.log("key : "+cursor.key);
						console.log("value : "+cursor.value);
						showInTable(cursor.value)
						cursor.continue();
					}
					console.log("SELECT BY NAME SUCCESS");
				}
				request.onerror = function(event){
					console.log("SELECT BY NAME ERROR");
				}
			}
			if(value_email!=""){
				var range = IDBKeyRange.only(value_email);
				var request = objectStore.index("email").openCursor(range);
				request.onsuccess = function(event){
					
					var cursor = event.target.result;
					if(cursor){
						console.log("key : "+cursor.key);
						console.log("value : "+cursor.value);
						showInTable(cursor.value)
						cursor.continue();
					}
					console.log("SELECT BY EMIAL SUCCESS");
				}
				request.onerror = function(event){
					console.log("SELECT BY EMAIL ERROR");
				}
			}
		}
	}
	
	/*刪除和清空*/
	var checkAll = document.getElementsByName("checkAll")[0];
	var btnDelete = document.getElementsByName("delete")[0];
	var btnClear = document.getElementsByName("clear")[0];
	checkAll.onclick = function(event){
		var checkBoxs = document.getElementsByName("check");
		console.log(checkBoxs);
		if(this.checked==true){
			for(var i=0;i<checkBoxs.length;i++){
				checkBoxs[i].checked = true;
			}
		}else{
			for(var i=0;i<checkBoxs.length;i++){
				checkBoxs[i].checked = false;
			}
		}
	};
	btnDelete.addEventListener("click",function(event){
		var checkBoxs = document.getElementsByName("check");
		console.log(checkBoxs);
		var transaction = null;
		var objectStore = null;
		var request = null;
		for(var i=0;i<checkBoxs.length;i++){
			var checkBox = checkBoxs[i];
			if(checkBox.checked == true){
				if(request == null){
					transaction = db.transaction(["customer"],"readwrite");
					objectStore = transaction.objectStore("customer");
				}
				var id = parseInt(checkBox.attributes["id"].value);
				console.log("checked : "+id);
				request = objectStore.get(id);
				request.onsuccess = function(event){
					if(event.target.result){
						var record = event.target.result;
						objectStore.delete(record.id);
						for(var j=0;j<checkBoxs.length;j++){
							if(checkBoxs[j].attributes["id"].value-record.id==0){
								var tr = checkBoxs[j].parentElement.parentElement;
								var tbody = checkBoxs[j].parentElement.parentElement.parentElement;
								tbody.removeChild(tr);
								break;
							}
						}
						console.log("DELETE SUCCESS");
					}
				};
				request.onerror = function(event){
					console.log("DELETE ERROR");
				};
			}
		}
	});
	btnClear.onclick = function() {
        var deleteDB = indexedDB.deleteDatabase("mydb");
        var tbody = document.getElementsByTagName("tbody")[0];
        if(tbody) {
        	table.removeChild(tbody);
        }
        deleteDB.onsuccess=function(event){
            console.log("success delete database!");
        };
        deleteDB.onerror=function(event){
            console.dir(event.target);
        };
	};
};

indexedDB.html

<!doctype html>
<html>
	<head>
		<meta charset="utf-8"/>
		<title>IndexedDB</title>
		<script type="text/javascript" src="StringUtil.js"></script>
		<!--<script type="text/javascript" src="jquery-1.8.3.js"></script>-->
		<script type="text/javascript" src="indexedDB.js"></script>
	</head>
	<body>
		<div>
			<label>姓名:<input type="text" name="name" value="" style="width:50px;height:15px;"/></label>
			<label>邮箱:<input type="text" name="email" value="" style="width:80px;height:15px;"/></label>
			<button type="button">查询</button>
		</div>
		<table>
			<thead>
				<tr>
					<th>ID</th>
					<th>姓名</th>
					<th>性別</th>
					<th>年龄</th>
					<th>邮箱</th>
				</tr>
			</thead>
			<tbody>
			</tbody>
			<tfoot>
				<tr>
					<td colspan="5">
						<label style="font-size:14px"><input type="checkbox" name="checkAll"/>全选</label>
						<input type="button" name="delete" value="刪除选中"/>
						<input type="button" name="clear" value="清空数据库"/>
					</td>
				</tr>
			</tfoot>
		</table>
	</body>
</html>

运行效果:

        第一次打开页面:

html5的indexedDB数据库操作实例_第1张图片
        根据姓名查询:
html5的indexedDB数据库操作实例_第2张图片
        修改ID为1的姓名Tom为Tomm:

html5的indexedDB数据库操作实例_第3张图片
       再次根据Tom查询,没有查询到,说明修改成功。
html5的indexedDB数据库操作实例_第4张图片
        根据Tomm查询,能将第一条信息查询出来。
html5的indexedDB数据库操作实例_第5张图片
        选中ID为2的记录,点击“删除选中”后,结果如下:
html5的indexedDB数据库操作实例_第6张图片
        点击“清空数据库”后,结果如下:
html5的indexedDB数据库操作实例_第7张图片

 

文章来源:http://fanli7.net/a/shujuku/20141223/533898.html

你可能感兴趣的:(html5,indexDB)