IndexedDB 是一种客户端数据库,允许你在浏览器中存储和检索大量的结构化数据。与传统的 localStorage 和 sessionStorage 相比,IndexedDB 更适用于需要高性能、大容量数据存储的场景。
主要特点包括:
let db;
let request = window.indexedDB.open("MyDatabase", 1);
request.onerror = function(event) {
console.error("Failed to open database");
};
request.onsuccess = function(event) {
db = event.target.result;
console.log("Database opened successfully");
};
request.onupgradeneeded = function(event) {
let db = event.target.result;
let objectStore = db.createObjectStore("MyObjectStore", { keyPath: "id", autoIncrement: true });
objectStore.createIndex("name", "name", { unique: false });
};
在上述例子中,通过indexedDB.open
方法打开一个名为"MyDatabase"的数据库。如果数据库不存在,会触发onupgradeneeded
事件来创建数据库和对象存储(类似于表)。
let transaction = db.transaction(["MyObjectStore"], "readwrite");
let objectStore = transaction.objectStore("MyObjectStore");
let data = { name: "John Doe", age: 25, email: "[email protected]" };
let request = objectStore.add(data);
request.onsuccess = function(event) {
console.log("Data added successfully");
};
request.onerror = function(event) {
console.error("Failed to add data");
};
在上述例子中,通过创建事务和对象存储,然后使用add
方法向对象存储中添加数据。
let transaction = db.transaction(["MyObjectStore"], "readonly");
let objectStore = transaction.objectStore("MyObjectStore");
let request = objectStore.get(1);
request.onsuccess = function(event) {
if (request.result) {
console.log("Data found:", request.result);
} else {
console.log("Data not found");
}
};
request.onerror = function(event) {
console.error("Failed to read data");
};
通过创建只读事务和对象存储,然后使用get
方法根据主键检索数据。
let transaction = db.transaction(["MyObjectStore"], "readwrite");
let objectStore = transaction.objectStore("MyObjectStore");
let newData = { id: 1, name: "Cheney", age: 11, email: "[email protected]" };
let request = objectStore.put(newData);
request.onsuccess = function(event) {
console.log("Data updated successfully");
};
request.onerror = function(event) {
console.error("Failed to update data");
};
通过创建读写事务和对象存储,然后使用put
方法更新数据。
let transaction = db.transaction(["MyObjectStore"], "readwrite");
let objectStore = transaction.objectStore("MyObjectStore");
let request = objectStore.delete(1);
request.onsuccess = function(event) {
console.log("Data deleted successfully");
};
request.onerror = function(event) {
console.error("Failed to delete data");
};
通过创建读写事务和对象存储,然后使用delete
方法删除数据。
IndexedDB 是一种在浏览器中存储和检索大量结构化数据的强大工具。通过异步操作、事务、索引等特性,它提供了高性能的数据存储和检索方式。IndexedDB 适用于需要大容量、高性能存储的应用场景,如离线应用、大型数据管理等。希望通过本篇博客,你对IndexedDB的概念、基本用法以及适用场景有了更深入的了解。