Indexeddb — это новая концепция HTML5 для хранения данных в браузере пользователя. indexeddb является более мощным, чем локальное хранилище, и полезен для приложений, которым требуется хранить большой объем данных. Эти приложения могут работать более эффективно и быстрее загружаться.
Зачем использовать indexeddb?
W3C объявил, что база данных Web SQL является устаревшей спецификацией локального хранилища, поэтому веб-разработчик больше не должен использовать эту технологию. indexeddb является альтернативой для базы данных web SQL и более эффективен, чем старые технологии.
Характеристики
- хранит значения пары ключей
- это не реляционная база данных
- IndexedDB API в основном асинхронный
- это не структурированный язык запросов
- он поддерживает доступ к данным из того же домена
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.") }
Откройте базу данных IndexedDB
Перед созданием базы данных мы должны подготовить некоторые данные для начала базы данных. Начнем с сведений о сотрудниках компании.
const employeeData = [ { id: "01", name: "Gopal K Varma", age: 35, email: "[email protected]" }, { id: "02", name: "Prasad", age: 24, email: "[email protected]" } ];
Добавление данных
Здесь добавляем некоторые данные вручную в данные, как показано ниже —
function add() { var request = db.transaction(["employee"], "readwrite") .objectStore("employee") .add({ id: "01", name: "prasad", age: 24, email: "[email protected]" }); 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! "); } }
Извлечение данных
Мы можем получить данные из базы данных с помощью 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!"); } }; }
Удаление данных
Мы можем удалить данные из IndexedDB с помощью remove (). Вот как выглядит код
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-код
Чтобы показать все данные, нам нужно использовать событие 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>
Окончательный код должен быть как —
<!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: "[email protected]" }, { id: "00-02", name: "prasad", age: 32, email: "[email protected]" } ]; 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: "[email protected]" }); 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>
Это даст следующий результат —