IDBDatabase
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Note: This feature is available in Web Workers.
Giao diện IDBDatabase của IndexedDB API cung cấp một kết nối tới cơ sở dữ liệu; bạn có thể dùng một đối tượng IDBDatabase để mở một transaction trên cơ sở dữ liệu của mình, rồi tạo, thao tác và xóa các object (dữ liệu) trong cơ sở dữ liệu đó. Giao diện này là cách duy nhất để lấy và quản lý các phiên bản của cơ sở dữ liệu.
Note: Mọi thao tác bạn thực hiện trong IndexedDB luôn diễn ra trong ngữ cảnh của một transaction, đại diện cho các tương tác với dữ liệu trong cơ sở dữ liệu. Tất cả các đối tượng trong IndexedDB, bao gồm object store, index và cursor, đều gắn với một transaction cụ thể. Vì vậy, bạn không thể thực thi lệnh, truy cập dữ liệu hoặc mở bất cứ thứ gì bên ngoài một transaction.
Thuộc tính thể hiện
IDBDatabase.nameRead only-
Một chuỗi chứa tên của cơ sở dữ liệu đang kết nối.
IDBDatabase.versionRead only-
Một số nguyên 64 bit chứa phiên bản của cơ sở dữ liệu đang kết nối. Khi cơ sở dữ liệu mới được tạo, thuộc tính này là một chuỗi rỗng.
IDBDatabase.objectStoreNamesRead only-
Một
DOMStringListchứa danh sách tên của các object store hiện có trong cơ sở dữ liệu đang kết nối.
Phương thức thể hiện
Kế thừa từ: EventTarget
IDBDatabase.close()-
Trả về ngay lập tức và đóng kết nối tới cơ sở dữ liệu trong một luồng riêng.
IDBDatabase.createObjectStore()-
Tạo và trả về một object store hoặc index mới.
IDBDatabase.deleteObjectStore()-
Xóa object store có tên đã cho trong cơ sở dữ liệu đang kết nối, cùng với mọi index tham chiếu đến nó.
IDBDatabase.transaction()-
Trả về ngay một transaction object (
IDBTransaction) chứa phương thứcIDBTransaction.objectStore, mà bạn có thể dùng để truy cập object store của mình. Nó chạy trong một luồng riêng.
Sự kiện
Nghe các sự kiện này bằng addEventListener() hoặc bằng cách gán một thuộc tính trình nghe sự kiện vào dạng oneventname của giao diện này.
close-
Sự kiện được kích hoạt khi kết nối cơ sở dữ liệu bị đóng một cách bất ngờ.
versionchange-
Sự kiện được kích hoạt khi có yêu cầu thay đổi cấu trúc cơ sở dữ liệu.
Các sự kiện sau khả dụng với IDBDatabase thông qua event bubbling từ IDBTransaction:
Ví dụ
Trong đoạn mã sau, chúng ta mở một cơ sở dữ liệu bất đồng bộ (IDBFactory), xử lý các trường hợp thành công và lỗi, và tạo một object store mới trong trường hợp cần nâng cấp (IDBDatabase). Để xem ví dụ hoàn chỉnh đang hoạt động, hãy xem ứng dụng To-do Notifications của chúng tôi (xem ví dụ trực tiếp).
// Hãy mở cơ sở dữ liệu của chúng ta
const DBOpenRequest = window.indexedDB.open("toDoList", 4);
// hai trình xử lý sự kiện này hoạt động trên đối tượng IDBDatabase
// khi cơ sở dữ liệu được mở thành công hoặc không thành công
DBOpenRequest.onerror = (event) => {
note.appendChild(document.createElement("li")).textContent =
"Lỗi khi tải cơ sở dữ liệu.";
};
DBOpenRequest.onsuccess = (event) => {
node.appendChild(document.createElement("li")).textContent =
"Cơ sở dữ liệu đã được khởi tạo.";
// lưu kết quả mở cơ sở dữ liệu vào biến db.
// Biến này sẽ được dùng rất nhiều về sau
db = DBOpenRequest.result;
// Chạy hàm displayData() để điền danh sách tác vụ
// với toàn bộ dữ liệu to-do đã có trong IDB
displayData();
};
// Sự kiện này xử lý tình huống khi cần tạo một phiên bản mới
// của cơ sở dữ liệu. Điều này xảy ra khi chưa từng có phiên bản nào
// được tạo trước đó, hoặc khi một số phiên bản mới được gửi vào qua
// dòng window.indexedDB.open ở trên
DBOpenRequest.onupgradeneeded = (event) => {
const db = event.target.result;
db.onerror = (event) => {
note.appendChild(document.createElement("li")).textContent =
"Lỗi khi tải cơ sở dữ liệu.";
};
// Tạo objectStore cho cơ sở dữ liệu này bằng
// IDBDatabase.createObjectStore
const objectStore = db.createObjectStore("toDoList", {
keyPath: "taskTitle",
});
// xác định những mục dữ liệu mà objectStore sẽ chứa
objectStore.createIndex("hours", "hours", { unique: false });
objectStore.createIndex("minutes", "minutes", { unique: false });
objectStore.createIndex("day", "day", { unique: false });
objectStore.createIndex("month", "month", { unique: false });
objectStore.createIndex("year", "year", { unique: false });
objectStore.createIndex("notified", "notified", { unique: false });
note.appendChild(document.createElement("li")).textContent =
"Object store đã được tạo.";
};
Dòng tiếp theo mở một transaction trên cơ sở dữ liệu, rồi mở một object store mà chúng ta có thể thao tác dữ liệu bên trong.
const objectStore = db
.transaction("toDoList", "readwrite")
.objectStore("toDoList");
Thông số kỹ thuật
| Specification |
|---|
| Indexed Database API 3.0> # database-interface> |
Tương thích trình duyệt
Xem thêm
- Dùng IndexedDB
- Dùng transaction:
IDBTransaction - Thiết lập một dải khóa:
IDBKeyRange - Truy xuất và thay đổi dữ liệu:
IDBObjectStore - Dùng cursor:
IDBCursor - Ví dụ tham khảo: To-do Notifications (Xem ví dụ trực tiếp).