当前位置:Gxlcms > JavaScript > indexedDB存储的代码示例

indexedDB存储的代码示例

时间:2021-07-01 10:21:17 帮助过:6人阅读

本篇文章给大家带来的内容是关于indexedDB存储的代码示例,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>indexedDB(浏览器本地存储数据库)</title>
  6. </head>
  7. <body>
  8. <p>IndexedDB 就是浏览器提供的本地数据库,它可以被网页脚本创建和操作。</p>
  9. <p>IndexedDB 允许储存大量数据,提供查找接口,还能建立索引。</p>
  10. <h3>indexedDB特点</h3>
  11. <ol>
  12. <li>键值对存储:采用对象仓库存储数据,所有的数据类型都可以直接存入,主键是独一无二的</li>
  13. <li>异步:</li>
  14. <li>支持事务:IndexedDB 支持事务(transaction),这意味着一系列操作步骤之中,只要有一步失败,整个事务就都取消,数据库回滚到事务发生之前的状态,不存在只改写一部分数据的情况。</li>
  15. <li>同源限制: IndexedDB 受到同源限制,每一个数据库对应创建它的域名。网页只能访问自身域名下的数据库,而不能访问跨域的数据库。</li>
  16. </ol>
  17. <script>
  18. /**
  19. * databaseName:字符串,表示数据库的名字,不存在则新建
  20. * version :第二个参数是整数,表示数据库的版本。默认为1
  21. * 返回一个 IDBRequest 对象 对象通过三种事件error、success、upgradeneeded
  22. *
  23. * 新建数据库与打开数据库是同一个操作。如果指定的数据库不存在,就会新建。不同之处在于,后续的操作主要在upgradeneeded事件的监听函数里面完成
  24. *
  25. * 新建数据步骤:
  26. * step1:新建对象仓库(即新建表
  27. * step2:新建索引
  28. *
  29. * */
  30. //IDBDatabase对象
  31. let db;
  32. //创建或者打开
  33. let request = window.indexedDB.open('newIDB');
  34. //删除数据库
  35. var DBDeleteRequest = window.indexedDB.deleteDatabase('newIDB');
  36. DBDeleteRequest.onerror = function (event) {
  37. console.log('Error');
  38. };
  39. DBDeleteRequest.onsuccess = function (event) {
  40. console.log('success');
  41. };
  42. //error事件--表示打开数据失败
  43. request.onerror = function (event) {
  44. console.log('数据库打开报错');
  45. db.close();
  46. };
  47. request.success = function (event) {
  48. //通过request对象的result属性拿到数据库对象
  49. db = request.result;
  50. console.log(db);
  51. console.log('数据库打开成功')
  52. };
  53. console.log(request);
  54. //onupgradeneeded---如果指定的版本号,大于数据库的实际版本号,就会发生数据库升级事件
  55. request.onupgradeneeded = function (event) {
  56. //通过事件对象的target.result属性,拿到数据库实例。
  57. console.log(event);
  58. //request对象的result属性上面,拿到一个IDBDatabase对象,它表示连接的数据库
  59. db = event.target.result;
  60. let objectStore;
  61. // 更好的写发是判断表是否存在
  62. if (!db.objectStoreNames.contains('newIDB')) {
  63. /**新建数据
  64. * 新建对象仓库(即新建表)
  65. * 新增一张叫做person的表格,主键是id
  66. * */
  67. //主键(key)是默认建立索引的属性。如果没有可以让 IndexedDB 自动生成主键db.createObjectStore('person',{ autoIncrement: true })
  68. objectStore = db.createObjectStore('newIDB', {keyPath: 'id'});
  69. /**
  70. * 新建索引
  71. * 三个参数分别为索引名称、索引所在的属性、配置对象(说明该属性是否包含重复的值)
  72. * **/
  73. objectStore.createIndex('name', 'name', {unique: false});
  74. objectStore.createIndex('email', 'email', {unique: true});
  75. }
  76. };
  77. /**新增数据
  78. * 新增数据指的是向对象仓库写入数据记录。这需要通过事务完成。
  79. * 写入数据需要新建一个事务
  80. * 新建时必须指定表格名称和操作模式("只读"或"读写")
  81. * 写入操作是一个异步操作,通过监听连接对象的success事件和error事件,了解是否写入成功。
  82. * **/
  83. function add() {
  84. //通过IDBTransaction.objectStore(name)方法,拿到 IDBObjectStore 对象,再通过表格对象的add()方法,向表格写入一条记录。
  85. var request = db.transaction(['newIDB'], 'readwrite')
  86. .objectStore('newIDB')
  87. .add({id: 1, name: '张三', age: 24, email: 'zhangsan@example.com'});
  88. request.onsuccess = function (event) {
  89. console.log('数据写入成功');
  90. };
  91. request.onerror = function (event) {
  92. console.log('数据写入失败');
  93. }
  94. }
  95. setTimeout(function () {
  96. console.log(db);
  97. add();
  98. }, 2000);
  99. /** 读取数据
  100. *
  101. *读取数据也是通过事务完成。
  102. *
  103. *
  104. * **/
  105. function read() {
  106. //创建是务
  107. let transaction = db.transaction(['newIDB']);
  108. //拿到 IDBObjectStore 对象
  109. let objectStore = transaction.objectStore('newIDB');
  110. //objectStore.get()方法用于读取数据,参数是主键的值。
  111. let request = objectStore.get(1);
  112. //失败监听
  113. request.onerror = function (event) {
  114. console.log('事务失败');
  115. db.close()
  116. };
  117. //成功监听
  118. request.onsuccess = function (event) {
  119. if (request.result) {
  120. console.log('Name: ' + request.result.name);
  121. console.log('Age: ' + request.result.age);
  122. console.log('Email: ' + request.result.email);
  123. } else {
  124. console.log('未获得数据记录');
  125. }
  126. };
  127. }
  128. setTimeout(function () {
  129. read();
  130. }, 4000);
  131. /**遍历数据
  132. *遍历数据表格的所有记录,要使用指针对象 IDBCursor。
  133. *
  134. * */
  135. function readAll() {
  136. let objectStore = db.transaction('newIDB').objectStore('newIDB');
  137. //新建指针对象的openCursor()方法是一个异步操作,所以要监听success事件。
  138. objectStore.openCursor().onsuccess = function (event) {
  139. let cursor = event.target.result;
  140. if (cursor) {
  141. console.log('Id: ' + cursor.key);
  142. console.log('Name: ' + cursor.value.name);
  143. console.log('Age: ' + cursor.value.age);
  144. console.log('Email: ' + cursor.value.email);
  145. cursor.continue();
  146. } else {
  147. console.log('没有更多数据了!');
  148. }
  149. };
  150. }
  151. setTimeout(function () {
  152. readAll();
  153. }, 6000);
  154. /**跟新数据
  155. *更新数据要使用IDBObject.put()方法。
  156. *
  157. * */
  158. function update() {
  159. //put()方法自动更新了主键为1的记录。
  160. let request = db.transaction(['newIDB'], 'readwrite')
  161. .objectStore('newIDB')
  162. .put({id: 1, name: '李四', age: 35, email: 'lisi@example.com'});
  163. request.onsuccess = function (event) {
  164. console.log('数据更新成功');
  165. };
  166. request.onerror = function (event) {
  167. console.log('数据更新失败');
  168. db.close();
  169. }
  170. }
  171. setTimeout(function () {
  172. update();
  173. }, 8000);
  174. /**删除数据
  175. *IDBObjectStore.delete()方法用于删除记录
  176. *
  177. * **/
  178. function remove() {
  179. let request = db.transaction(['newIDB'], 'readwrite')
  180. .objectStore('newIDB')
  181. .delete(1);
  182. request.onsuccess = function (event) {
  183. console.log('数据删除成功');
  184. };
  185. }
  186. // remove();
  187. /**使用索引
  188. * 索引的意义在于,可以让你搜索任意字段,也就是说从任意字段拿到数据记录。如果不建立索引,默认只能搜索主键(即从主键取值)。
  189. * */
  190. function search() {
  191. let request = db.transaction(['newIDB'], 'readonly')
  192. .objectStore('newIDB')
  193. .index('name')
  194. .get('李四');
  195. request.onsuccess = function (e) {
  196. var result = e.target.result;
  197. if (result) {
  198. console.log('搜索成功')
  199. } else {
  200. console.log('搜索失败')
  201. }
  202. }
  203. }
  204. // search();
  205. </script>
  206. </body>
  207. </html>
  208. **注意:使用的时候链接数据库,失败或者完成其他操作关闭数据库;**

本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的JavaScript视频教程栏目!

以上就是indexedDB存储的代码示例的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行