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
トランザクション内でのみ呼び出すことができます。
メモ: この機能はウェブワーカー内で利用可能です。
構文
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
-
autoIncrement
がtrue
に設定されていて、keyPath
が空文字か空文字を含む配列の場合。
例
// データベースを開く
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
関連項目
- IndexedDB の使用
- トランザクションの開始:
IDBDatabase
- トランザクションの使用:
IDBTransaction
- キーの範囲の設定:
IDBKeyRange
- データの取得と変更:
IDBObjectStore
- カーソルの使用:
IDBCursor
- リファレンス例: To-do Notifications (動く例を見る)