IDBDatabase

注意:此功能在Web Workers中可用。

IndexedDB API 的IDBDatabase接口提供了一个数据库连接;可以使用IDBDatabase对象打开数据库事务,然后创建、操作和删除该数据库中的对象(数据)。该接口提供了获取和管理数据库版本的唯一方法。

注意:在 IndexedDB 中执行的所有操作都始终发生在事务的上下文中,表示与数据库中数据的交互。IndexedDB 中的所有对象(包括对象存储、索引和游标)都与特定事务绑定。因此,不能在事务之外执行命令、访问数据或打开任何内容。

EventTarget IDBDatabase

实例属性

IDBDatabase.name 只读

包含已连接数据库名称的字符串。

IDBDatabase.version 只读

包含已连接数据库版本的 64 位整数。当数据库首次创建时,此属性为空字符串。

IDBDatabase.objectStoreNames 只读

一个DOMStringList,包含已连接数据库中当前对象存储名称的列表。

实例方法

继承自:EventTarget

IDBDatabase.close()

立即返回并关闭到数据库的连接,在单独的线程中执行。

IDBDatabase.createObjectStore()

创建并返回一个新的对象存储或索引。

IDBDatabase.deleteObjectStore()

销毁已连接数据库中给定名称的对象存储,以及任何引用它的索引。

IDBDatabase.transaction()

立即返回一个事务对象(IDBTransaction),其中包含IDBTransaction.objectStore方法,可以使用该方法访问对象存储。在单独的线程中运行。

事件

使用addEventListener()或为该接口的oneventname属性分配事件侦听器来侦听这些事件。

close

当数据库连接意外关闭时触发的事件。

versionchange

当请求数据库结构更改时触发的事件。

以下事件可通过来自IDBTransaction的事件冒泡提供给IDBDatabase

IDBTransaction abort

当事务被中止时触发的事件。

IDBTransaction error

当请求返回错误且事件冒泡到连接对象时触发的事件。

示例

在以下代码片段中,我们异步打开数据库(IDBFactory),处理成功和错误情况,并在需要升级时创建新的对象存储(IDBDatabase)。有关完整的运行示例,请参阅我们的待办事项通知应用程序(查看示例)。

js
// Let us open our database
const DBOpenRequest = window.indexedDB.open("toDoList", 4);

// these two event handlers act on the IDBDatabase object,
// when the database is opened successfully, or not
DBOpenRequest.onerror = (event) => {
  note.appendChild(document.createElement("li")).textContent =
    "Error loading database.";
};

DBOpenRequest.onsuccess = (event) => {
  node.appendChild(document.createElement("li")).textContent =
    "Database initialized.";

  // store the result of opening the database in the db
  // variable. This is used a lot later on
  db = DBOpenRequest.result;

  // Run the displayData() function to populate the task
  // list with all the to-do list data already in the IDB
  displayData();
};

// This event handles the event whereby a new version of
// the database needs to be created Either one has not
// been created before, or a new version number has been
// submitted via the window.indexedDB.open line above

DBOpenRequest.onupgradeneeded = (event) => {
  const db = event.target.result;

  db.onerror = (event) => {
    note.appendChild(document.createElement("li")).textContent =
      "Error loading database.";
  };

  // Create an objectStore for this database using
  // IDBDatabase.createObjectStore

  const objectStore = db.createObjectStore("toDoList", {
    keyPath: "taskTitle",
  });

  // define what data items the objectStore will contain

  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 created.";
};

下一行在数据库上打开一个事务,然后打开一个对象存储,然后可以在其中操作数据。

js
const objectStore = db
  .transaction("toDoList", "readwrite")
  .objectStore("toDoList");

规范

规范
Indexed Database API 3.0
# database-interface

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅