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
- 遠端, 資料夾遍歷
- c++ 遍歷資料夾C++
- Matlab對資料夾的層次遍歷和深度遍歷Matlab
- jquery遍歷得到的 Map 資料,jQuery
- Java 資料夾遞迴遍歷Java遞迴
- PHP遞迴遍歷資料夾PHP遞迴
- indexedDB 更新資料Index
- indexedDB 新增資料Index
- 資料結構與演算法——二叉樹的前序遍歷,中序遍歷,後序遍歷資料結構演算法二叉樹
- 遍歷資料夾的幾種方式
- php遍歷資料夾以及子目錄;PHP
- Python字典的遍歷,包括key遍歷/value遍歷/item遍歷/Python
- IndexedDB 資料庫新增資料Index資料庫
- indexedDB 資料庫 索引Index資料庫索引
- indexedDB 資料庫版本Index資料庫
- indexedDB 查詢資料Index
- indexedDB 刪除資料Index
- indexedDB 批量新增資料Index
- IndexedDB 資料庫概述Index資料庫
- IndexedDB 資料庫用法Index資料庫
- 資料結構 二叉樹遍歷資料結構二叉樹
- MSSQL遍歷資料庫根據列值查詢資料SQL資料庫
- indexedDB 資料庫主鍵Index資料庫
- indexedDB 刪除資料庫Index資料庫
- IndexedDB資料庫介紹Index資料庫
- 資料結構之遍歷二叉樹資料結構二叉樹
- C/C++遍歷資料夾和檔案C++
- 【C#】-遍歷資料夾簡約的方式C#
- js的map遍歷和array遍歷JS
- java去掉陣列中重複的資料和遍歷資料Java陣列
- 二叉樹建立,前序遍歷,中序遍歷,後序遍歷 思路二叉樹
- 二叉樹的建立、前序遍歷、中序遍歷、後序遍歷二叉樹
- python對常見資料型別的遍歷Python資料型別
- Python遍歷資料夾常用的兩種方法!Python
- matlab遍歷資料夾下的所有檔案Matlab
- Related to Oracle SQL 關於樹形資料的遍歷OracleSQL