IDBObjectStore: get() メソッド
IDBObjectStore
インターフェイスの get()
メソッドは、IDBRequest
オブジェクトを返し、別スレッドで指定のキーによって選択されるオブジェクトを返します。これはオブジェクトストアから特定のレコードを取得する用です。
値が正常に見つかった場合は、その構造化複製が作成され、要求オブジェクトの result
属性に設定されます。
メモ:
このメソッドは「レコードがデータベースに存在しない場合」と「レコードの値が undefined
の場合」で同じ結果を返します。
これらを区別するには、同じキーで openCursor()
メソッドを呼びます。このメソッドは、レコードが存在する場合はカーソルを返し、存在しない場合はカーソルを返しません。
メモ: この機能はウェブワーカー内で利用可能です。
構文
get(key)
引数
key
-
取得するレコードを特定するキーまたはキー範囲です。
返値
この操作に関係する今後のイベントが発火する IDBRequest
オブジェクトです。
操作に成功した場合は、この要求の result
プロパティの値は指定のキーまたはキー範囲にマッチする最初のレコードの値になります。
例外
このメソッドは、以下の種類のいずれかの DOMException
を投げる可能性があります。
TransactionInactiveError
DOMException
-
この
IDBObjectStore
のトランザクションが実行中でないとき投げられます。 DataError
DOMException
-
与えられたキーまたはキー範囲に無効なキーが含まれる時投げられます。
InvalidStateError
DOMException
-
この
IDBObjectStore
が削除されたか取り除かれたとき投げられます。
例
以下のコード断片では、データベースの読み書きトランザクションを開き、get()
を用いてオブジェクトストアから特定のレコード 1 個 (キー "Walk dog"
を持つサンプルレコード) を取得します。データオブジェクトを取得したら、通常の JavaScript により更新し、IDBObjectStore.put
操作によりデータベースに書き戻すことができます。動く例全体は、To-do Notifications アプリケーションを参照してください。(動く例を見る)
// データベースを開く
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
関連情報
- IndexedDB の使用
- トランザクションの開始:
IDBDatabase
- トランザクションの使用:
IDBTransaction
- キー範囲の設定:
IDBKeyRange
- データの取得と変更:
IDBObjectStore
- カーソルの使用:
IDBCursor
- リファレンス例: To-do Notifications (動く例を見る)