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

2 years ago
  1. /**
  2. * Created by DongJi_Ren on 2016/4/28.
  3. */
  4. //数据库名
  5. var DB_NAME='addr_list';
  6. //对象存储空间名
  7. var OBJ_SPASE_NAME='addrs';
  8. //数据库实例对象
  9. var mydb;
  10. $(document).ready(function(){
  11. /**********************一、数据库初始化的操作*************************************************************************************/
  12. //IndexedDB的规范尚未最终定稿,不同的浏览器厂商还是使用浏览器前缀实现IndexedDB API。
  13. // 基于Gecko内核的浏览器使用moz前缀,基于WebKit内核的浏览器使用webkit前缀。
  14. window.indexedDB=window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB;
  15. if(window.indexedDB){ //当浏览器支持IndexedDB数据库
  16. var request; // request对象用于处理用户对数据库的操作请求
  17. //1、打开或创建数据库
  18. request=window.indexedDB.open(DB_NAME,'3.0'); //参数为:数据库名和版本号;数据库名存在,则打开它;否则创建数据库。
  19. //2、指定操作成功的处理函数(可以获得对象存储空间信息)
  20. request.onsuccess=function(event){
  21. alert('数据库打开成功!');
  22. mydb=request.result; //数据库实例对象
  23. //var len = mydb.objectStoreNames.length; //对象存储空间名的个数
  24. //var name=mydb.objectStoreNames[i]; //对象存储空间名
  25. /*******调用********************/
  26. byCursorGet(mydb);
  27. };
  28. //3、指定操作失败的处理函数
  29. request.onerror=function(event){
  30. alert("打开失败,错误号:" + event.target.errorCode);
  31. };
  32. //4、执行改变数据库结构的操作函数(包括创建对象存储空间)。onupgradeneeded事件在下列情况下被触发:数据库第一次被打开时;打开数据库时指定的版本号高于当前被持久化的数据库版本号。(可通过修改版本号触发该事件)
  33. request.onupgradeneeded = function(event) {
  34. mydb=request.result;//获得数据库实例对象
  35. if(!mydb.objectStoreNames.contains(OBJ_SPASE_NAME)) { //判断对象存储空间名称是否已经存在
  36. var objectStore = mydb.createObjectStore(OBJ_SPASE_NAME, {keyPath: "phone"});//创建students对象存储空间;指定keyPath选项为id(即主键为id)
  37. //对象存储空间students的列email上创建一个唯一索引email,可以创建多个索引。
  38. objectStore.createIndex("phone", //索引名
  39. "phone", //创建索引的列(即keyPath,索引属性字段名)
  40. { unique: true }); //索引选项(索引属性值是否唯一:true or false)
  41. }
  42. }
  43. } else{
  44. alert("您的浏览器不支持IndexedDB数据库。");
  45. }
  46. /*setTimeout(function(){
  47. mydb.close(); //关闭连接
  48. window.indexedDB.deleteDatabase(DB_NAME); //删除数据库
  49. },1500);*/
  50. /*********************二、定义方法调用****************************************************************************/
  51. //插入数据,
  52. function insert(mydb){
  53. var data = {
  54. "name": $("#name").val(),
  55. "phone": $("#phone").val(),
  56. "company": $("#company").val(),
  57. "date":new Date().toLocaleTimeString()
  58. };
  59. //使用事务
  60. var transaction = mydb.transaction(OBJ_SPASE_NAME, //事务操作的对象存储空间名
  61. 'readwrite'); //事务模式:'readwrite'可读写模式;READ_ONLY只读模式;VERSION_CHANGE版本升级模式;
  62. //2.1、当事务中的所有操作请求都被处理完成时触发
  63. transaction.oncomplete = function(event) {};
  64. //2.2、当事务中出现错误时触发,默认的处理方式为回滚事务;
  65. transaction.onerror = function(event) {};
  66. //2.3、当事务被终止时触发
  67. transaction.onabort = function(event){};
  68. //2.4、从事务中获得相关的对象存储空间对象
  69. var objStore = transaction.objectStore(OBJ_SPASE_NAME);
  70. //向students存储空间加入一个student对象,获得request对象用于处理用户对数据库的操作请求(同样拥有onerror,onupgradeneeded,onsuccess事件)
  71. var request = objStore.add(data);
  72. request.onsuccess = function(e) {
  73. alert("成功插入数据,id=" + e.target.result);
  74. };
  75. }
  76. //查询数据
  77. function get(mydb){
  78. var transaction = mydb.transaction(OBJ_SPASE_NAME,'readwrite');
  79. transaction.oncomplete = function(event) {};
  80. transaction.onerror = function(event) {};
  81. transaction.onabort = function(event){};
  82. var objStore = transaction.objectStore(OBJ_SPASE_NAME);
  83. var request = objStore.get(n); //按照id查询
  84. request.onsuccess=function(e){
  85. var tr="";
  86. var obj=e.target.result;
  87. tr=tr+"<tr><td>"+(1)+"</td><td>"+obj.name+"</td><td class='p'>"+obj.phone
  88. +"</td><td>"+obj.company+"</td><td>"+obj.date
  89. +"</td><td><input type='button' value='删除'></td></tr>";
  90. //叠加表格内容
  91. $("#check span").html(
  92. "<table width='100%'>"
  93. +"<tr><td>序号</td><td>姓名</td><td>手机</td><td>公司</td><td>添加时间</td><td>操作</td></tr>"
  94. +tr+"</table>"
  95. );
  96. }
  97. }
  98. //更新数据
  99. function update(mydb){
  100. var transaction = mydb.transaction(OBJ_SPASE_NAME,'readwrite');
  101. transaction.oncomplete = function(event) {};
  102. transaction.onerror = function(event) {};
  103. transaction.onabort = function(event){};
  104. var objStore = transaction.objectStore(OBJ_SPASE_NAME);
  105. var request = objStore.get("110");
  106. request.onsuccess=function(e){
  107. var student=e.target.result;
  108. student.name='wwww1';
  109. objStore.put(student);
  110. }
  111. }
  112. //删除数据
  113. function remove(mydb){
  114. var transaction = mydb.transaction(OBJ_SPASE_NAME,'readwrite');
  115. transaction.oncomplete = function(event) {};
  116. transaction.onerror = function(event) {};
  117. transaction.onabort = function(event){};
  118. var objStore = transaction.objectStore(OBJ_SPASE_NAME);
  119. var request = objStore.delete(myphone);
  120. request.onsuccess = function(e) {
  121. alert("成功删除数据");
  122. };
  123. }
  124. //利用索引查询
  125. function byIndexGet(mydb){
  126. var transaction = mydb.transaction(OBJ_SPASE_NAME,'readwrite');
  127. transaction.oncomplete = function(event) {};
  128. transaction.onerror = function(event) {};
  129. transaction.onabort = function(event){};
  130. var objStore = transaction.objectStore(OBJ_SPASE_NAME);
  131. var index = objStore.index('email'); //索引名
  132. var request=index.get('liming1@email.com'); //通过索引值获取数据
  133. request.onsuccess=function(e){
  134. var student=e.target.result;
  135. alert(student.name+":索引查询");
  136. }
  137. }
  138. //游标遍历所有
  139. function byCursorGet(mydb){
  140. var tr='';var i=0;
  141. var transaction = mydb.transaction(OBJ_SPASE_NAME,'readwrite');
  142. transaction.oncomplete = function(event) {};
  143. transaction.onerror = function(event) {};
  144. transaction.onabort = function(event){};
  145. var objStore = transaction.objectStore(OBJ_SPASE_NAME);
  146. var request=objStore.openCursor();//打开游标
  147. request.onsuccess = function(e){
  148. var cursor = e.target.result;
  149. if(cursor){
  150. //alert(cursor.value.name);
  151. var obj=cursor.value;
  152. tr=tr+"<tr><td>"+(i+1)+"</td><td>"+obj.name+"</td><td class='p'>"+obj.phone
  153. +"</td><td>"+obj.company+"</td><td>"+obj.date
  154. +"</td><td><input type='button' value='删除'></td></tr>";i=i+1;
  155. cursor.continue();
  156. }else {
  157. alert('遍历完成');
  158. //叠加表格内容
  159. $("#result span").html(
  160. "<table width='100%'>"
  161. +"<tr><td>序号</td><td>姓名</td><td>手机</td><td>公司</td><td>添加时间</td><td>操作</td></tr>"
  162. +tr+"</table>"
  163. );
  164. }
  165. }
  166. }
  167. //通过范围和排序条件,游标遍历符合条件的数据
  168. function byCursorGetForRangeAndSort(mydb){
  169. var transaction = mydb.transaction(OBJ_SPASE_NAME,'readwrite');
  170. transaction.oncomplete = function(event) {};
  171. transaction.onerror = function(event) {};
  172. transaction.onabort = function(event){};
  173. var objStore = transaction.objectStore(OBJ_SPASE_NAME);
  174. var range = IDBKeyRange.bound("110", "113", false, true); //范围
  175. var request=objStore.openCursor(range, //范围(可以为null或省略不写)
  176. IDBCursor.NEXT); //游标顺序循环(可以省略不写)
  177. request.onsuccess = function(e){
  178. var cursor1 = e.target.result;
  179. if(cursor1){
  180. alert(cursor1.value.name);
  181. cursor1.continue();
  182. }else {
  183. alert('遍历完成');
  184. }
  185. }
  186. /**
  187. * 范围
  188. *1匹配等于指定键值的记录var range = IDBKeyRange.only(指定键值)
  189. *2匹配小于指定键值的记录var range = IDBKeyRange.lowerBound(指定键值, 是否不包括指定键值)
  190. *3匹配大于指定键值的记录var range = IDBKeyRange.upperBound(指定键值, 是否不包括指定键值)
  191. *4匹配指定范围内的记录var range = IDBKeyRange.bound("110",//下限键值
  192. * "113",//上限键值
  193. * false,//是否不包括下限键值
  194. * true);//是否不包括上限键值
  195. */
  196. /**
  197. * 顺序参数
  198. * IDBCursor.NEXT顺序循环
  199. * IDBCursor.NEXT_NO_DUPLICATE顺序循环且键值不重复
  200. * IDBCursor.PREV倒序循环
  201. * IDBCursor.PREV _NO_DUPLICATE倒序循环且键值不重复
  202. */
  203. }
  204. /***************************三、界面事件处理*****************************************************************/
  205. //插入数据
  206. $("#sm").on('click',function(){
  207. insert(mydb);
  208. byCursorGet(mydb);
  209. });
  210. //单击删除按钮
  211. var myphone;
  212. $(document).on('click',"table input",function(){
  213. myphone=$(this).parent().prev().prev().prev().text();
  214. $(this).parent().parent().remove();
  215. remove(mydb);
  216. });
  217. //查询
  218. var n;
  219. $("#check input[type='button']").on('click',function(){
  220. n=$("#check input:first").val();
  221. get(mydb);
  222. });
  223. });