IDBDatabase:createObjectStore() 方法

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

createObjectStore() 方法是 IDBDatabase 接口的方法,用于创建并返回一个新的 IDBObjectStore

该方法接收存储的名称以及一个参数对象,该对象允许您定义重要的可选属性。您可以使用该属性来唯一标识存储中的各个对象。由于该属性是标识符,因此它应该对每个对象都是唯一的,并且每个对象都应该具有该属性。

此方法只能在 versionchange 事务中调用。

语法

js
createObjectStore(name)
createObjectStore(name, options)

参数

name

要创建的新对象存储的名称。请注意,可以创建名称为空的对象存储。

options 可选

一个选项对象,其属性是方法的可选参数。它包含以下属性

keyPath 可选

新对象存储要使用的 键路径。如果为空或未指定,则创建的对象存储没有键路径,并使用 行外键。您也可以将数组作为 keyPath 传递。

autoIncrement 可选

如果为 true,则对象存储具有 键生成器。默认为 false

返回值

一个新的 IDBObjectStore

异常

此方法可能会引发 DOMException,其 name 为以下类型之一

InvalidStateError DOMException

如果该方法不是从 versionchange 事务回调中调用的,则抛出此异常。

TransactionInactiveError DOMException

如果对不存在的源数据库发出请求(例如,当数据库已被删除或移除时),则抛出此异常。在 Firefox 41 之前的版本中,在这种情况下也会引发 InvalidStateError,这具有误导性;现在已修复此问题(请参阅 Firefox 错误 1176165)。

ConstraintError DOMException

如果连接的数据库中已存在具有给定名称(基于区分大小写的比较)的对象存储,则抛出此异常。

InvalidAccessError DOMException

如果 autoIncrement 设置为 true 且 keyPath 为空字符串或包含空字符串的数组,则抛出此异常。

示例

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

// This handler is called when a new version of the database
// is created, either when one has not been created before
// or when a new version number is submitted by calling
// window.indexedDB.open().
// This handler is only supported in recent browsers.
request.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

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

规范

规范
Indexed Database API 3.0
# ref-for-dom-idbdatabase-createobjectstore①

浏览器兼容性

BCD 表格仅在启用了 JavaScript 的浏览器中加载。

另请参阅