索引数据库 |介绍
IndexedDB 是浏览器中的键值数据库。它是一个 NoSQL 数据库。它是事务性的,即如果特定操作属于事务,则不会应用该事务的任何操作。这可确保数据库保持一致。
为什么要使用 IndexedDB?
- localStorage 专为少量数据而设计,只能存储键和值的字符串数据,而 IndexedDB 可以处理大量非结构化数据,包括文件/Blob。
- 它类似于 JavaScript 对象,它也可以具有嵌套的对象和属性。
- 它可以异步访问,它可以与服务工作者一起使用,这有助于离线存储数据,一旦设备获得互联网访问权限,它就会将其同步到服务器。
使用 IndexedDB: JavaScript 用于访问 IndexedDB。
- 打开数据库 –
// Syntax let request = indexedDB.open(name, version); // name : database name, string value // version : version number, by default 1, positive integer
打开数据库的代码应该检查数据库是否存在。
let request = indexedDB.open("gfg", 1); request.onupgradeneeded = function() { // Initialize new database }; request.onerror = function() { console.error("Unable to access database", request.error); // Logs error to the console }; request.onsuccess = function() { let db = request.result; // Use existing database };
- 在数据库中创建对象存储 –
// Syntax let objectStore = db.createObjectStore(name, [keyOption]); // name : object store name // keyOption : object property key
let request = indexedDB.open("gfg", 1); // Check if object store exists and // then creates it request.onupgradeneeded = function() { let db = request.result; if (!db.objectStoreNames.contains('articles')) { db.createObjectStore('articles', {keyPath: 'id'}); } };
- 开始交易——
// Syntax db.transaction(objectStore, type]); // objectStore : objectStore which is to be used // type : readonly or readwrite
let transaction = db.transaction("articles", "readwrite"); // Access an object store let articles = transaction.objectStore("articles"); // Create an object let article = { id: 'Array', topic : 'Introduction to Array' }; // Add an object let request = articles.add(article); // Success request.onsuccess = function() { console.log("Article Published", request.result); }; // Failed request.onerror = function() { console.log("Article Publish failed", request.error); };
- 关闭交易
let transaction = db.transaction("books", "readwrite"); // Conducting operations in the transaction // When transaction is over transaction.oncomplete = function() { console.log("Transaction is complete"); };
我们可以通过 transaction.abort() 方法强制中止事务。
IndexedDB 的使用和实现很简单。这就是您可以通过 JavaScript 在代码中使用 IndexedDB 的方式。