indexedDB 遍歷資料
本章節介紹一下indexedDB資料庫如何遍歷資料。
實現遍歷功能要藉助於指標,下面通過程式碼例項詳細進行一下介紹。
一.不借助索引:
下面是一段簡單程式碼例項它通過指標遍歷物件倉庫中的資料。
並且將每一條資料的name屬性值寫入展示出來:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <script> let students=[ { id:1001, name:"張三", age:21, sex:"男" },{ id:1002, name:"李四", age:20, sex:"女" },{ id:1003, name:"王五", age:19, sex:"女" } ]; let request = window.indexedDB.open("antzone", 1); request.onupgradeneeded = (ev) => { let db = ev.target.result; if (!db.objectStoreNames.contains('students')) { let objectStore = db.createObjectStore('students',{keyPath:"id"}); objectStore.createIndex("xingbie","sex",{ unique: false }); objectStore.createIndex("xingming","name",{ unique: true }); } } request.onsuccess = (ev) => { let db = ev.target.result; let odiv=document.getElementById("ant"); let transaction = db.transaction(['students'], 'readwrite'); let objectStore = transaction.objectStore('students'); for(let i=0;i<students.length;i++){ objectStore.add(students[i]); } let cursorRequest = objectStore.openCursor(); let str=""; cursorRequest.onsuccess= (ev) =>{ let cursor = ev.target.result; if (cursor){ str = str + "姓名:"+cursor.value.name+"<br/>"; cursor.continue(); } odiv.innerHTML = str; } } </script> </head> <body> <div id="ant"></div> </body> </html>
程式碼執行效果截圖如下:
程式碼分析如下:
(1).關於指標更多知識參閱IDBCursor物件一章節。
(2).通過物件倉庫的openCursor()方法可以建立一個指標物件,此方法是非同步的,返回IDBRequest物件。
(3).通過IDBRequest物件的success事件監聽指標物件是否建立成功。
(4).如果建立成功,ev.target.result可以獲取一個IDBCursorWithValue型別資料,繼承自IDBCursor。
(5).IDBCursorWithValue與IDBCursor型別資料相比,多了一個value屬性,值是當前指標指向資料值。
(6).ontinue()將指標移向下一個資料記錄,如果不存在那麼游標指向null,存在則再一次觸發success事件。
如果想要對遍歷操作進行更加精細的控制可以參閱如下兩篇文章:
(1).indexedDB 查詢指定區間資料一章節。
(2).IDBKeyRange 物件一章節。
二.基於索引:
利用索引可以更加便利的檢索資料,假設以性別進行檢索。
看如下程式碼例項:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <script> let students=[ { id:1001, name:"張三", age:21, sex:"男" },{ id:1002, name:"李四", age:20, sex:"女" },{ id:1003, name:"王五", age:19, sex:"女" } ]; let request = window.indexedDB.open("antzone", 1); request.onupgradeneeded = (ev) => { let db = ev.target.result; if (!db.objectStoreNames.contains('students')) { let objectStore = db.createObjectStore('students',{keyPath:"id"}); objectStore.createIndex("xingbie","sex",{ unique: false }); objectStore.createIndex("xingming","name",{ unique: true }); } } request.onsuccess = (ev) => { let db = ev.target.result; let odiv=document.getElementById("ant"); let transaction = db.transaction(['students'], 'readwrite'); let objectStore = transaction.objectStore('students'); for(let i=0;i<students.length;i++){ objectStore.add(students[i]); } let cursorRequest = objectStore.openCursor(); let str=""; let IDBIndexSex = objectStore.index("xingbie"); let getRequest=IDBIndexSex.openCursor(IDBKeyRange.only("女")) getRequest.onsuccess=function(ev){ let cursor = ev.target.result; if (cursor){ str = str + "姓名:"+cursor.value.name+"<br/>"; cursor.continue(); } odiv.innerHTML = str; } } </script> </head> <body> <div id="ant"></div> </body> </html>
程式碼執行效果截圖如下:
上述程式碼利用索引、指標和IDBKeyRange物件實現了對性別為"女"的學生的檢索。
原理大致與不借助索引方式是一直的,無非一個是基於主鍵,一個是基於索引。
基於索引可以認為資料是以對應的索引值進行排序,圖示如下:
然後再利用索引值進行過濾檢索資料,比較簡單的操作。
相關文章
- 資料遍歷
- js資料處理——遍歷JS
- 遠端, 資料夾遍歷
- jquery遍歷得到的 Map 資料,jQuery
- indexedDB 更新資料Index
- indexedDB 新增資料Index
- Python字典的遍歷,包括key遍歷/value遍歷/item遍歷/Python
- 遍歷資料夾的幾種方式
- php遍歷資料夾以及子目錄;PHP
- IndexedDB 資料庫新增資料Index資料庫
- indexedDB 查詢資料Index
- indexedDB 資料庫 索引Index資料庫索引
- indexedDB 刪除資料Index
- indexedDB 批量新增資料Index
- indexedDB 資料庫版本Index資料庫
- IndexedDB 資料庫概述Index資料庫
- IndexedDB 資料庫用法Index資料庫
- 資料結構 二叉樹遍歷資料結構二叉樹
- MSSQL遍歷資料庫根據列值查詢資料SQL資料庫
- indexedDB 刪除資料庫Index資料庫
- indexedDB 資料庫主鍵Index資料庫
- python對常見資料型別的遍歷Python資料型別
- 【C#】-遍歷資料夾簡約的方式C#
- Python遍歷資料夾常用的兩種方法!Python
- matlab遍歷資料夾下的所有檔案Matlab
- js的map遍歷和array遍歷JS
- React中兩種遍歷資料的方法(map、forEach)React
- 遍歷 FlowDocument
- Linuxshell遍歷Linux
- jQuery 遍歷jQuery
- 高效遍歷匹配Json資料,避免巢狀迴圈[轉]JSON巢狀
- 資料結構學習筆記-先序遍歷森林資料結構筆記
- SQL Server通過建立臨時表遍歷更新資料SQLServer
- 【資料結構】二叉樹的建立與遍歷資料結構二叉樹
- 資料結構——樹與二叉樹的遍歷資料結構二叉樹
- python遍歷迭代器自動鏈式處理資料Python
- 用python講解資料結構之樹的遍歷Python資料結構
- indexedDB 通過索引查詢資料Index索引