IDBDatabase
IndexedDB API の IDBDatabase
インターフェイスは、データベースへの接続を提供します。IDBDatabase
オブジェクトで、データベースのトランザクションを開き、データベースのオブジェクト(データ)を生成したり、操作したり、削除したりできます。このインターフェイスはデータベースのバージョンを取得したり、統合したりする唯一の方法を提供します。
注: この機能は Web Worker 内で利用可能です
メモ: IndexedDB 内で行う全ての操作は、データベース内のデータとの作用を表すトランザクションの文脈で起こります。IndexedDB 内の全てのオブジェクト (オブジェクトストア、インデックス、カーソルを含みます) は、特定のトランザクションに紐づいています。そのため、トランザクション外では、コマンドを実行したり、データにアクセスしたり、何かを開いたりできません。
インスタンスプロパティ
IDBDatabase.name
読取専用-
接続しているデータベース名を含む文字列。
IDBDatabase.version
読取専用-
接続しているデータベースのバージョンを含む 64-bit integer (en-US)。データベースが初めて作られた場合、この属性は空文字です。
IDBDatabase.objectStoreNames
読取専用-
接続しているデータベースのオブジェクトストア名のリストを含む
DOMStringList
。
インスタンスメソッド
EventTarget
から継承します。
IDBDatabase.close
-
即座に応答して、別スレッドでデータベースを閉じます。
IDBDatabase.createObjectStore
-
新しくオブジェクトストアかインデックスを生成して返します。
IDBDatabase.deleteObjectStore
-
接続中のデータベース内の与えられた名前のオブジェクトストアを、参照しているインデックスとともに削除します。
IDBDatabase.transaction
-
オブジェクトストアにアクセスできる
IDBTransaction.objectStore
メソッドを含むトランザクションオブジェクト (IDBTransaction
)を即座に返します。別スレッドで実行されます。
イベント
addEventListener()
を用いるか、このインターフェイスの oneventname
プロパティにイベントリスナーを代入することで、これらのイベントを監視できます。
close
-
データベースへの接続が予期せず閉じられたとき発火するイベントです。
versionchange
-
データベースの構造の変更が要求されたとき発火するイベントです。
IDBTransaction
からのイベントバブリングにより、IDBDatabase
で以下のイベントが利用可能です。
例
次のコードスニペットでは、データベースを非同期で開き (IDBFactory
)、成功と失敗の場合にイベントを登録し、アップグレードが必要な場合には、新しいオブジェクトストアを生成しています (IDBdatabase
)。 完璧に動作する例は、To-do Notifications アプリケーション (動く例を見る) を見てください。
js
// 我々のデータベースを開きましょう
var DBOpenRequest = window.indexedDB.open("toDoList", 4);
// これら 2 個のイベントハンドラーは、データベースが正常に開かれたか、失敗した時に動作します。
DBOpenRequest.onerror = function (event) {
note.innerHTML += "<li>データベースの読み込みに失敗しました。</li>";
};
DBOpenRequest.onsuccess = function (event) {
note.innerHTML += "<li>データベースを初期化しました。</li>";
// データベースを開いた結果を変数 db に保存します。これは後でたくさん使います。
db = DBOpenRequest.result;
// displayData() 関数を実行し、タスクリストに既に IDB にある全ての to-do リストデータを入れます。
displayData();
};
// このイベントハンドラーは、新しいバージョンのデータベースの作成が必要なことを表すイベントを処理します。
// これは、データベースが作成されていないときや、上の行の window.indexedDB.open に
// 新しいバージョン番号が渡されたときです。
DBOpenRequest.onupgradeneeded = function (event) {
var db = event.target.result;
db.onerror = function (event) {
note.innerHTML += "<li>データベースの読み込みに失敗しました。</li>";
};
// IDBDatabase.createObjectStore を用いてデータベースにオブジェクトストアを作成します。
var 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>";
};
次の行は、データベースでトランザクションを開いて、そしてオブジェクトストアを開いて、中のデータを操作しています。
js
const objectStore = db
.transaction("toDoList", "readwrite")
.objectStore("toDoList");
仕様書
Specification |
---|
Indexed Database API 3.0 # database-interface |
ブラウザーの互換性
BCD tables only load in the browser
関連情報
- IndexedDB の使用
- トランザクションの開始 :
IDBDatabase
- トランザクションの使用 :
IDBTransaction
- キーの範囲の設定 :
IDBKeyRange
- データの取得と変更 :
IDBObjectStore
- カーソルの使用 :
IDBCursor
- リファレンス例 : To-do Notifications (動く例を見る)