indexeddb是一個新的HTML5概念,用於在用戶瀏覽器中存儲數據。indexeddb比本地存儲更強大,對於需要存儲大量數據的應用程式非常有用。這些應用程式運行效率更高,加載速度更快。
Why to use indexeddb?
W3C已經宣布Web SQL資料庫是一個不推薦使用的本地存儲規範,因此Web開發人員不應該再使用此技術。indexeddb是web-SQL資料庫的另一種選擇,比舊技術更有效。
Features
- it stores key-pair values
- it is not a relational database
- IndexedDB API is mostly asynchronous
- it is not a structured query language
- it has supported to access the data from same domain
IndexedDB
在進入indexeddb之前,我們需要添加一些實現的前綴,如下所示
window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; window.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.msIDBTransaction; window.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange || window.msIDBKeyRange if (!window.indexedDB) { window.alert("Your browser doesn't support a stable version of IndexedDB.") }
Open an IndexedDB database
在創建資料庫之前,我們必須爲資料庫準備一些數據。讓我們從公司員工的詳細信息開始。
const employeeData = [ { id: "01", name: "Gopal K Varma", age: 35, email: "contact@tutorialspoint.com" }, { id: "02", name: "Prasad", age: 24, email: "prasad@tutorialspoint.com" } ];
Adding the data
這裡手動將一些數據添加到數據中,如下所示;
function add() { var request = db.transaction(["employee"], "readwrite") .objectStore("employee") .add({ id: "01", name: "prasad", age: 24, email: "prasad@tutorialspoint.com" }); request.onsuccess = function(event) { alert("Prasad has been added to your database."); }; request.onerror = function(event) { alert("Unable to add data\r\nPrasad is already exist in your database! "); } }
Retrieving Data
我們可以使用get()從資料庫檢索數據
function read() { var transaction = db.transaction(["employee"]); var objectStore = transaction.objectStore("employee"); var request = objectStore.get("00-03"); request.onerror = function(event) { alert("Unable to retrieve daa from database!"); }; request.onsuccess = function(event) { if(request.result) { alert("Name: " + request.result.name + ", Age: " + request.result.age + ", Email: " + request.result.email); } else { alert("Kenny couldn't be found in your database!"); } }; }
使用get(),我們可以將數據存儲在對象中,而不是將數據存儲在游標中,並且可以從游標中檢索數據。
function readAll() { var objectStore = db.transaction("employee").objectStore("employee"); objectStore.openCursor().onsuccess = function(event) { var cursor = event.target.result; if (cursor) { alert("Name for id " + cursor.key + " is " + cursor.value.name + ", Age: " + cursor.value.age + ", Email: " + cursor.value.email); cursor.continue(); } else { alert("No more entries!"); } }; }
Removing the data
我們可以使用remove()從IndexedDB中刪除數據
function remove() { var request = db.transaction(["employee"], "readwrite") .objectStore("employee") .delete("02"); request.onsuccess = function(event) { alert("prasad entry has been removed from your database."); }; }
HTML Code
要顯示所有數據,我們需要使用onClick事件,如下所示code−
<!DOCTYPE html> <html> <head> <meta http-equiv = "Content-Type" content = "text/html; charset = utf-8" /> <title>IndexedDb Demo | onlyWebPro.com</title> </head> <body> <button onclick = "read()">Read </button> <button onclick = "readAll()"></button> <button onclick = "add()"></button> <button onclick = "remove()">Delete </button> </body> </html>
最終代碼應該是as−
<!DOCTYPE html> <html> <head> <meta http-equiv = "Content-Type" content = "text/html; charset = utf-8" /> <script type = "text/javascript"> //prefixes of implementation that we want to test window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; //prefixes of window.IDB objects window.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.msIDBTransaction; window.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange || window.msIDBKeyRange if (!window.indexedDB) { window.alert("Your browser doesn't support a stable version of IndexedDB.") } const employeeData = [ { id: "00-01", name: "gopal", age: 35, email: "gopal@tutorialspoint.com" }, { id: "00-02", name: "prasad", age: 32, email: "prasad@tutorialspoint.com" } ]; var db; var request = window.indexedDB.open("newDatabase", 1); request.onerror = function(event) { console.log("error: "); }; request.onsuccess = function(event) { db = request.result; console.log("success: "+ db); }; request.onupgradeneeded = function(event) { var db = event.target.result; var objectStore = db.createObjectStore("employee", {keyPath: "id"}); for (var i in employeeData) { objectStore.add(employeeData[i]); } } function read() { var transaction = db.transaction(["employee"]); var objectStore = transaction.objectStore("employee"); var request = objectStore.get("00-03"); request.onerror = function(event) { alert("Unable to retrieve daa from database!"); }; request.onsuccess = function(event) { // Do something with the request.result! if(request.result) { alert("Name: " + request.result.name + ", Age: " + request.result.age + ", Email: " + request.result.email); } else { alert("Kenny couldn't be found in your database!"); } }; } function readAll() { var objectStore = db.transaction("employee").objectStore("employee"); objectStore.openCursor().onsuccess = function(event) { var cursor = event.target.result; if (cursor) { alert("Name for id " + cursor.key + " is " + cursor.value.name + ", Age: " + cursor.value.age + ", Email: " + cursor.value.email); cursor.continue(); } else { alert("No more entries!"); } }; } function add() { var request = db.transaction(["employee"], "readwrite") .objectStore("employee") .add({ id: "00-03", name: "Kenny", age: 19, email: "kenny@planet.org" }); request.onsuccess = function(event) { alert("Kenny has been added to your database."); }; request.onerror = function(event) { alert("Unable to add data\r\nKenny is aready exist in your database! "); } } function remove() { var request = db.transaction(["employee"], "readwrite") .objectStore("employee") .delete("00-03"); request.onsuccess = function(event) { alert("Kenny's entry has been removed from your database."); }; } </script> </head> <body> <button onclick = "read()">Read </button> <button onclick = "readAll()">Read all </button> <button onclick = "add()">Add data </button> <button onclick = "remove()">Delete data </button> </body> </html>
它將產生以下輸出&負;