IDBOpenDBRequest
IndexedDB API の IDBOpenDBRequest インターフェイスは、固有のイベントハンドラー属性を用い、(IDBFactory.open や IDBFactory.deleteDatabase により行われた) データベースのオープンや削除の要求の結果へのアクセスを提供します。
注: この機能は Web Worker 内で利用可能です
インスタンスプロパティ
親の IDBRequest および EventTarget からプロパティを継承しています。
インスタンスメソッド
メソッドはありませんが、親の IDBRequest および EventTarget からメソッドを継承しています。
イベント
親インターフェイスの IDBRequest および EventTarget で定義されているイベントも IDBOpenDBRequest オブジェクトで発生させることができます。
addEventListener() を用いるか、このインターフェイスの oneventname プロパティにイベントリスナーを代入することで、一般のイベントおよび固有のイベントを監視できます。
このインターフェイスに固有のイベントは、以下です。
blocked-
データベースへのオープン中の接続が、同じデータベースの
versionchangeトランザクションをブロックしているとき発火します。onblockedプロパティを用いても利用可能です。 upgradeneeded-
現在のバージョンよりも高いバージョン番号でデータベースをオープンしようとしたとき発火します。
onupgradeneededプロパティを用いても利用可能です。
例
この例では、高いバージョン番号のデータベースをを読み込もうとした場合に、onupgradeneeded ハンドラーによりデータベースの構造を更新します。動く例全体は、To-do Notifications アプリケーションを見てください。(動く例を見る)
js
let db;
// 我々のデータベースを開きましょう
const DBOpenRequest = window.indexedDB.open("toDoList", 4);
// これらのイベントハンドラーは、開かれているデータベースを扱います
DBOpenRequest.onerror = (event) => {
note.innerHTML += '<li>データベースの読み込み中にエラーが発生しました。</li>';
};
DBOpenRequest.onsuccess = (event) => {
note.innerHTML += '<li>データベースの初期化が完了しました。</li>';
// データベースを開いた結果を変数 db に格納します。
// これは後でたくさん使います。
db = DBOpenRequest.result;
// IDB に既に入っている TO-DO リストのデータ全てを
// タスクリストに入れるため、displayData() 関数を実行します。
displayData();
};
// このイベントは、データベースがまだ作成されていないか、
// 上の window.indexedDB.open の行で新しいバージョン番号が
// 指定されたかで、新しいバージョンのデータベースを
// 作成する必要がある場合を扱います。
// これは最近のブラウザーでしか実装されていません。
DBOpenRequest.onupgradeneeded = (event) => {
const db = event.target.result;
db.onerror = (event) => {
note.innerHTML += '<li>データベースの読み込み中にエラーが発生しました。</li>';
};
// このデータベース用の objectStore を作成します
const objectStore = db.createObjectStore("toDoList", { keyPath: "taskTitle" });
// objectStore にどのようなアイテムを保存するかを定義します
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 });
};
仕様書
| Specification |
|---|
| Indexed Database API 3.0 # idbopendbrequest |
ブラウザーの互換性
BCD tables only load in the browser
関連情報
- IndexedDB の使用
- トランザクションの開始s:
IDBDatabase - トランザクションの使用:
IDBTransaction - キーの範囲の設定:
IDBKeyRange - データの取得と変更:
IDBObjectStore - カーソルの使用:
IDBCursor - リファレンス例: To-do Notifications (動く例を見る)