IDBDatabase: createObjectStore() メソッド

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2021.

createObjectStore()IDBDatabase インターフェイスのメソッドで、新しいオブジェクトストアやインデックスを生成して返します。

このメソッドは、ストアの名前をとるだけでなく、重要なオプションプロパティを定義するためのオプションオブジェクトもとります。ストアの個々のオブジェクトを一意にするために、プロパティを使用できます。 プロパティが識別子ならば、それはすべてのオブジェクトで一意であり、すべてのオブジェクトはそのプロパティを持つべきです。

このメソッドは versionchange トランザクション内でのみ呼び出すことができます。

メモ: この機能はウェブワーカー内で利用可能です。

構文

js
createObjectStore(name)
createObjectStore(name, options)

引数

name

作成するために新しいオブジェクトストアの名前です。なお、空の名前でオブジェクトストアを作成することも可能です。

options 省略可

属性がメソッドのオプション引数であるオプションオブジェクトです。以下のプロパティがあります。

keyPath 省略可

新しいオブジェクトストアで使用するためのキーパス。空または指定しなかった場合、オブジェクトストアはキーパスなしで作成され、アウトオブラインキーを使用します。 keyPath として配列を渡すこともできます。

autoIncrement 省略可

true の場合、オブジェクトストアはキージェネレーターがあります。 既定値は false です。

返値

新しい IDBObjectStore です。

例外

このメソッドは DOMException を発生させる可能性があり、 name は以下の種類のいずれかになります。

InvalidStateError DOMException

このメソッドが versionchange トランザクションのコールバックとして呼び出されなかった場合に発生します。

TransactionInactiveError DOMException

存在しないソースデータベースに対してリクエストが行われた場合に発生します(例えば、データベースが削除された場合など)。バージョン 41 以前の Firefox では、この場合にも InvalidStateError が発生し、誤解を招く可能性がありました。これは修正されました(Firefox bug 1176165 を参照)。

ConstraintError DOMException

与えられた名前のオブジェクトストア (大文字と小文字を区別する比較に基づく) が接続中のデータベースに既に存在します。

InvalidAccessError DOMException

autoIncrementtrue に設定されていて、keyPath が空文字か空文字を含む配列の場合。

js
// データベースを開く
const DBOpenRequest = window.indexedDB.open("toDoList", 4);

// このイベントハンドラーは、新しいバージョンのデータベースの作成が
// 必要なことを表すイベントを処理します。これは、データベースが作成されて
// いないときや、上の行の新しいバージョン番号が
// window.indexedDB.open() に渡されたときです。
// これは、最近のブラウザーでしか実装されていません。
request.onupgradeneeded = (event) => {
  const db = event.target.result;

  db.onerror = (event) => {
    note.innerHTML += "<li>データベースの読み込みに失敗しました。</li>";
  };

  // データベースにオブジェクトストアを作成します。

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

  // オブジェクトストアにどのようなデータ項目が入るかを定義します。

  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.innerHTML += "<li>オブジェクトストアが作成されました。</li>";
};

仕様書

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

ブラウザーの互換性

BCD tables only load in the browser

関連項目