/** * 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+""+(1)+""+obj.name+""+obj.phone +""+obj.company+""+obj.date +""; //叠加表格内容 $("#check span").html( "" +"" +tr+"
序号姓名手机公司添加时间操作
" ); } } //更新数据 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+""+(i+1)+""+obj.name+""+obj.phone +""+obj.company+""+obj.date +"";i=i+1; cursor.continue(); }else { alert('遍历完成'); //叠加表格内容 $("#result span").html( "" +"" +tr+"
序号姓名手机公司添加时间操作
" ); } } } //通过范围和排序条件,游标遍历符合条件的数据 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); }); });