IDBObjectStore: get() メソッド

IDBObjectStore インターフェイスの get() メソッドは、IDBRequest オブジェクトを返し、別スレッドで指定のキーによって選択されるオブジェクトを返します。これはオブジェクトストアから特定のレコードを取得する用です。

値が正常に見つかった場合は、その構造化複製が作成され、要求オブジェクトの result 属性に設定されます。

メモ: このメソッドは「レコードがデータベースに存在しない場合」と「レコードの値が undefined の場合」で同じ結果を返します。 これらを区別するには、同じキーで openCursor() メソッドを呼びます。このメソッドは、レコードが存在する場合はカーソルを返し、存在しない場合はカーソルを返しません。

注: この機能は Web Worker 内で利用可能です。

構文

js
get(key)

引数

key

取得するレコードを特定するキーまたはキー範囲です。

返値

この操作に関係する今後のイベントが発火する IDBRequest オブジェクトです。

操作に成功した場合は、この要求の result プロパティの値は指定のキーまたはキー範囲にマッチする最初のレコードの値になります。

例外

このメソッドは、以下の種類のいずれかの DOMException を投げる可能性があります。

TransactionInactiveError DOMException

この IDBObjectStore のトランザクションが実行中でないとき投げられます。

DataError DOMException

与えられたキーまたはキー範囲に無効なキーが含まれる時投げられます。

InvalidStateError DOMException

この IDBObjectStore が削除されたか取り除かれたとき投げられます。

以下のコード断片では、データベースの読み書きトランザクションを開き、get() を用いてオブジェクトストアから特定のレコード 1 個 (キー "Walk dog" を持つサンプルレコード) を取得します。データオブジェクトを取得したら、通常の JavaScript により更新し、IDBObjectStore.put 操作によりデータベースに書き戻すことができます。動く例全体は、To-do Notifications アプリケーションを参照してください。(動く例を見る)

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

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

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

  // getData() 関数を実行し、データベースからデータを取得する
  getData();
};

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

  // すべて完了したとき、トランザクションの正常終了を報告する
  transaction.oncomplete = (event) => {
    note.innerHTML += "<li>トランザクションが完了しました。</li>";
  };

  transaction.onerror = (event) => {
    note.innerHTML += `<li>トランザクションはエラーのため開けませんでした: ${transaction.error}</li>`;
  };

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

  // オブジェクトストアからキーで指定したレコードを取得する要求をする
  const objectStoreRequest = objectStore.get("Walk dog");

  objectStoreRequest.onsuccess = (event) => {
    // 要求の成功を報告する
    note.innerHTML += "<li>要求に成功しました。</li>";

    const myRecord = objectStoreRequest.result;
  };
}

仕様書

Specification
Indexed Database API 3.0
# ref-for-dom-idbobjectstore-get①

ブラウザーの互換性

BCD tables only load in the browser

関連情報