You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
243 lines
11 KiB
243 lines
11 KiB
/**
|
|
* Created by DongJi_Ren on 2016/4/28.
|
|
*/
|
|
//数据库名
|
|
var DB_NAME='addr_list';
|
|
//对象存储空间名
|
|
var OBJ_SPASE_NAME='addrs';
|
|
//数据库实例对象
|
|
var mydb;
|
|
|
|
|
|
|
|
$(document).ready(function(){
|
|
/**********************一、数据库初始化的操作*************************************************************************************/
|
|
//IndexedDB的规范尚未最终定稿,不同的浏览器厂商还是使用浏览器前缀实现IndexedDB API。
|
|
// 基于Gecko内核的浏览器使用moz前缀,基于WebKit内核的浏览器使用webkit前缀。
|
|
window.indexedDB=window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB;
|
|
if(window.indexedDB){ //当浏览器支持IndexedDB数据库
|
|
var request; // request对象用于处理用户对数据库的操作请求
|
|
//1、打开或创建数据库
|
|
request=window.indexedDB.open(DB_NAME,'3.0'); //参数为:数据库名和版本号;数据库名存在,则打开它;否则创建数据库。
|
|
//2、指定操作成功的处理函数(可以获得对象存储空间信息)
|
|
request.onsuccess=function(event){
|
|
alert('数据库打开成功!');
|
|
mydb=request.result; //数据库实例对象
|
|
//var len = mydb.objectStoreNames.length; //对象存储空间名的个数
|
|
//var name=mydb.objectStoreNames[i]; //对象存储空间名
|
|
/*******调用********************/
|
|
byCursorGet(mydb);
|
|
};
|
|
//3、指定操作失败的处理函数
|
|
request.onerror=function(event){
|
|
alert("打开失败,错误号:" + event.target.errorCode);
|
|
};
|
|
//4、执行改变数据库结构的操作函数(包括创建对象存储空间)。onupgradeneeded事件在下列情况下被触发:数据库第一次被打开时;打开数据库时指定的版本号高于当前被持久化的数据库版本号。(可通过修改版本号触发该事件)
|
|
request.onupgradeneeded = function(event) {
|
|
mydb=request.result;//获得数据库实例对象
|
|
if(!mydb.objectStoreNames.contains(OBJ_SPASE_NAME)) { //判断对象存储空间名称是否已经存在
|
|
var objectStore = mydb.createObjectStore(OBJ_SPASE_NAME, {keyPath: "phone"});//创建students对象存储空间;指定keyPath选项为id(即主键为id)
|
|
//对象存储空间students的列email上创建一个唯一索引email,可以创建多个索引。
|
|
objectStore.createIndex("phone", //索引名
|
|
"phone", //创建索引的列(即keyPath,索引属性字段名)
|
|
{ unique: true }); //索引选项(索引属性值是否唯一:true or false)
|
|
}
|
|
}
|
|
} else{
|
|
alert("您的浏览器不支持IndexedDB数据库。");
|
|
}
|
|
/*setTimeout(function(){
|
|
mydb.close(); //关闭连接
|
|
window.indexedDB.deleteDatabase(DB_NAME); //删除数据库
|
|
},1500);*/
|
|
|
|
|
|
|
|
/*********************二、定义方法调用****************************************************************************/
|
|
|
|
|
|
//插入数据,
|
|
function insert(mydb){
|
|
var data = {
|
|
"name": $("#name").val(),
|
|
"phone": $("#phone").val(),
|
|
"company": $("#company").val(),
|
|
"date":new Date().toLocaleTimeString()
|
|
};
|
|
//使用事务
|
|
var transaction = mydb.transaction(OBJ_SPASE_NAME, //事务操作的对象存储空间名
|
|
'readwrite'); //事务模式:'readwrite'可读写模式;READ_ONLY只读模式;VERSION_CHANGE版本升级模式;
|
|
//2.1、当事务中的所有操作请求都被处理完成时触发
|
|
transaction.oncomplete = function(event) {};
|
|
//2.2、当事务中出现错误时触发,默认的处理方式为回滚事务;
|
|
transaction.onerror = function(event) {};
|
|
//2.3、当事务被终止时触发
|
|
transaction.onabort = function(event){};
|
|
//2.4、从事务中获得相关的对象存储空间对象
|
|
var objStore = transaction.objectStore(OBJ_SPASE_NAME);
|
|
//向students存储空间加入一个student对象,获得request对象用于处理用户对数据库的操作请求(同样拥有onerror,onupgradeneeded,onsuccess事件)
|
|
var request = objStore.add(data);
|
|
request.onsuccess = function(e) {
|
|
alert("成功插入数据,id=" + e.target.result);
|
|
};
|
|
}
|
|
//查询数据
|
|
function get(mydb){
|
|
var transaction = mydb.transaction(OBJ_SPASE_NAME,'readwrite');
|
|
transaction.oncomplete = function(event) {};
|
|
transaction.onerror = function(event) {};
|
|
transaction.onabort = function(event){};
|
|
var objStore = transaction.objectStore(OBJ_SPASE_NAME);
|
|
var request = objStore.get(n); //按照id查询
|
|
request.onsuccess=function(e){
|
|
var tr="";
|
|
var obj=e.target.result;
|
|
tr=tr+"<tr><td>"+(1)+"</td><td>"+obj.name+"</td><td class='p'>"+obj.phone
|
|
+"</td><td>"+obj.company+"</td><td>"+obj.date
|
|
+"</td><td><input type='button' value='删除'></td></tr>";
|
|
//叠加表格内容
|
|
$("#check span").html(
|
|
"<table width='100%'>"
|
|
+"<tr><td>序号</td><td>姓名</td><td>手机</td><td>公司</td><td>添加时间</td><td>操作</td></tr>"
|
|
+tr+"</table>"
|
|
);
|
|
}
|
|
}
|
|
//更新数据
|
|
function update(mydb){
|
|
var transaction = mydb.transaction(OBJ_SPASE_NAME,'readwrite');
|
|
transaction.oncomplete = function(event) {};
|
|
transaction.onerror = function(event) {};
|
|
transaction.onabort = function(event){};
|
|
var objStore = transaction.objectStore(OBJ_SPASE_NAME);
|
|
var request = objStore.get("110");
|
|
request.onsuccess=function(e){
|
|
var student=e.target.result;
|
|
student.name='wwww1';
|
|
objStore.put(student);
|
|
}
|
|
}
|
|
//删除数据
|
|
function remove(mydb){
|
|
var transaction = mydb.transaction(OBJ_SPASE_NAME,'readwrite');
|
|
transaction.oncomplete = function(event) {};
|
|
transaction.onerror = function(event) {};
|
|
transaction.onabort = function(event){};
|
|
var objStore = transaction.objectStore(OBJ_SPASE_NAME);
|
|
var request = objStore.delete(myphone);
|
|
request.onsuccess = function(e) {
|
|
alert("成功删除数据");
|
|
};
|
|
}
|
|
//利用索引查询
|
|
function byIndexGet(mydb){
|
|
var transaction = mydb.transaction(OBJ_SPASE_NAME,'readwrite');
|
|
transaction.oncomplete = function(event) {};
|
|
transaction.onerror = function(event) {};
|
|
transaction.onabort = function(event){};
|
|
var objStore = transaction.objectStore(OBJ_SPASE_NAME);
|
|
var index = objStore.index('email'); //索引名
|
|
var request=index.get('liming1@email.com'); //通过索引值获取数据
|
|
request.onsuccess=function(e){
|
|
var student=e.target.result;
|
|
alert(student.name+":索引查询");
|
|
}
|
|
}
|
|
//游标遍历所有
|
|
function byCursorGet(mydb){
|
|
var tr='';var i=0;
|
|
var transaction = mydb.transaction(OBJ_SPASE_NAME,'readwrite');
|
|
transaction.oncomplete = function(event) {};
|
|
transaction.onerror = function(event) {};
|
|
transaction.onabort = function(event){};
|
|
var objStore = transaction.objectStore(OBJ_SPASE_NAME);
|
|
var request=objStore.openCursor();//打开游标
|
|
request.onsuccess = function(e){
|
|
var cursor = e.target.result;
|
|
if(cursor){
|
|
//alert(cursor.value.name);
|
|
var obj=cursor.value;
|
|
tr=tr+"<tr><td>"+(i+1)+"</td><td>"+obj.name+"</td><td class='p'>"+obj.phone
|
|
+"</td><td>"+obj.company+"</td><td>"+obj.date
|
|
+"</td><td><input type='button' value='删除'></td></tr>";i=i+1;
|
|
cursor.continue();
|
|
}else {
|
|
alert('遍历完成');
|
|
//叠加表格内容
|
|
$("#result span").html(
|
|
"<table width='100%'>"
|
|
+"<tr><td>序号</td><td>姓名</td><td>手机</td><td>公司</td><td>添加时间</td><td>操作</td></tr>"
|
|
+tr+"</table>"
|
|
);
|
|
}
|
|
}
|
|
}
|
|
//通过范围和排序条件,游标遍历符合条件的数据
|
|
function byCursorGetForRangeAndSort(mydb){
|
|
var transaction = mydb.transaction(OBJ_SPASE_NAME,'readwrite');
|
|
transaction.oncomplete = function(event) {};
|
|
transaction.onerror = function(event) {};
|
|
transaction.onabort = function(event){};
|
|
var objStore = transaction.objectStore(OBJ_SPASE_NAME);
|
|
var range = IDBKeyRange.bound("110", "113", false, true); //范围
|
|
var request=objStore.openCursor(range, //范围(可以为null或省略不写)
|
|
IDBCursor.NEXT); //游标顺序循环(可以省略不写)
|
|
request.onsuccess = function(e){
|
|
var cursor1 = e.target.result;
|
|
if(cursor1){
|
|
alert(cursor1.value.name);
|
|
cursor1.continue();
|
|
}else {
|
|
alert('遍历完成');
|
|
}
|
|
}
|
|
/**
|
|
* 范围:
|
|
*(1)匹配等于指定键值的记录:var range = IDBKeyRange.only(指定键值)
|
|
*(2)匹配小于指定键值的记录:var range = IDBKeyRange.lowerBound(指定键值, 是否不包括指定键值)
|
|
*(3)匹配大于指定键值的记录:var range = IDBKeyRange.upperBound(指定键值, 是否不包括指定键值)
|
|
*(4)匹配指定范围内的记录:var range = IDBKeyRange.bound("110",//下限键值
|
|
* "113",//上限键值
|
|
* false,//是否不包括下限键值
|
|
* true);//是否不包括上限键值
|
|
*/
|
|
/**
|
|
* 顺序参数:
|
|
* IDBCursor.NEXT,顺序循环;
|
|
* IDBCursor.NEXT_NO_DUPLICATE,顺序循环且键值不重复;
|
|
* IDBCursor.PREV,倒序循环;
|
|
* IDBCursor.PREV _NO_DUPLICATE,倒序循环且键值不重复。
|
|
|
|
*/
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***************************三、界面事件处理*****************************************************************/
|
|
//插入数据
|
|
$("#sm").on('click',function(){
|
|
insert(mydb);
|
|
byCursorGet(mydb);
|
|
});
|
|
//单击删除按钮
|
|
var myphone;
|
|
$(document).on('click',"table input",function(){
|
|
myphone=$(this).parent().prev().prev().prev().text();
|
|
$(this).parent().parent().remove();
|
|
remove(mydb);
|
|
});
|
|
//查询
|
|
var n;
|
|
$("#check input[type='button']").on('click',function(){
|
|
n=$("#check input:first").val();
|
|
get(mydb);
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
});
|