IDBTransaction: objectStore() メソッド

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.

IDBTransaction インターフェイスの objectStore() メソッドは、トランザクションの対象に追加済のオブジェクトストアを返します。

同じトランザクションオブジェクトで、同じ名前を指定して呼び出した場合、このメソッドを何回呼び出しても同じ IDBObjectStore インスタンスを返します。別のトランザクションオブジェクトで呼び出した場合、別の IDBObjectStore インスタンスを返します。

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

構文

js
objectStore(name)

引数

name

要求するオブジェクトストアの名前です。

返値

オブジェクトストアにアクセスする用の IDBObjectStore オブジェクトを返します。

例外

NotFoundError DOMException

要求されたオブジェクトストアがトランザクションの対象に無いとき投げられます。

InvalidStateError DOMException

要求が削除されたか取り除かれたソースオブジェクトに対してなされたか、トランザクションが終了済みのとき投げられます。

以下のコード断片では、データベースの読み書きトランザクションを開き、オブジェクトストアにデータを追加します。トランザクションのイベントハンドラーに設定された関数により、成功時または失敗時にトランザクションを開いた結果を報告する点にも注目してください。動く例全体は、To-do Notifications アプリケーションを参照してください。(動く例を見る)

js
const note = document.getElementById("notifications");

// IDB データを保存する用の db オブジェクトのインスタンス
let db;

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

DBOpenRequest.onsuccess = (event) => {
  note.innerHTML += "<li>データベースを初期化しました。</li>";

  // データベースを開いた結果を変数 db に格納する
  // これは後でよく使う
  db = DBOpenRequest.result;

  // addData() 関数を実行し、データをデータベースに追加する
  addData();
};

function addData() {
  // IDB に挿入できる新しいオブジェクトを生成する
  const newItem = [
    {
      taskTitle: "Walk dog",
      hours: 19,
      minutes: 30,
      day: 24,
      month: "December",
      year: 2013,
      notified: "no",
    },
  ];

  // データベースの読み書きトランザクションを開き、データを追加する準備をする
  const transaction = db.transaction(["toDoList"], "readwrite");

  // トランザクションを開くのに成功したら報告する
  transaction.oncomplete = (event) => {
    note.innerHTML +=
      "<li>トランザクション完了: データベースの変更が完了しました。</li>";
  };

  transaction.onerror = (event) => {
    note.innerHTML +=
      "<li>トランザクションはエラーのため開けませんでした。アイテムは重複させられません。</li>";
  };

  // トランザクション上でオブジェクトストアを生成する
  const objectStore = transaction.objectStore("toDoList");

  // オブジェクトストアに newItem オブジェクトを追加する
  const objectStoreRequest = objectStore.add(newItem[0]);

  objectStoreRequest.onsuccess = (event) => {
    // 要求の成功を報告する (これは、アイテムがデータベースにに正常に格納されたことを意味しません。
    // これを知るには、transaction.onsuccess を用いる必要があります)
    note.innerHTML += "<li>要求に成功しました。</li>";
  };
}

仕様書

Specification
Indexed Database API 3.0
# ref-for-dom-idbtransaction-objectstore①

ブラウザーの互換性

BCD tables only load in the browser

関連情報