IDBDatabase
===========

IndexedDB API の `IDBDatabase` インターフェイスは、データベースへの接続を提供します。`IDBDatabase` オブジェクトで、データベースのトランザクションを開き、データベースのオブジェクト（データ）を生成したり、操作したり、削除したりできます。このインターフェイスはデータベースのバージョンを取得したり、統合したりする唯一の方法を提供します。

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

**メモ:** IndexedDB 内で行う全ての操作は、データベース内のデータとの作用を表すトランザクションの文脈で起こります。IndexedDB 内の全てのオブジェクト (オブジェクトストア、インデックス、カーソルを含みます) は、特定のトランザクションに紐づいています。そのため、トランザクション外では、コマンドを実行したり、データにアクセスしたり、何かを開いたりできません。

EventTarget

IDBDatabaseインスタンスプロパティ
-----------

`IDBDatabase.name` 読取専用 

文字列で、接続しているデータベース名が入ります。

`IDBDatabase.version` 読取専用 

64 ビット整数で、接続しているデータベースのバージョンが入ります。データベースが初めて作られた場合、この属性は空文字列です。

`IDBDatabase.objectStoreNames` 読取専用 

接続しているデータベースのオブジェクトストア名のリストを含む`DOMStringList`。

インスタンスメソッド
----------

EventTarget から継承しています。

`IDBDatabase.close()`

即座に応答して、別スレッドでデータベースを閉じます。

`IDBDatabase.createObjectStore()`

新しくオブジェクトストアかインデックスを生成して返します。

`IDBDatabase.deleteObjectStore()`

接続中のデータベース内の与えられた名前のオブジェクトストアを、参照しているインデックスとともに削除します。

`IDBDatabase.transaction()`

オブジェクトストアにアクセスできる`IDBTransaction.objectStore`メソッドを含むトランザクションオブジェクト (`IDBTransaction`) を即座に返します。別スレッドで実行されます。

イベント
----

`addEventListener()` を用いるか、このインターフェイスの `oneventname` プロパティにイベントリスナーを代入することで、これらのイベントを待ち受けできます。

`close`

データベースへの接続が予期せず閉じられたとき発行されるイベントです。

`versionchange`

データベースの構造の変更が要求されたとき発行されるイベントです。

`IDBTransaction` からのイベントバブリングにより、`IDBDatabase` で以下のイベントが利用可能です。

`IDBTransaction` `abort`

トランザクションが中止されたときに発行されるイベントです。

`IDBTransaction` `error`

要求がエラーを返し、イベントが接続オブジェクトにバブリングしたとき発行されるイベントです。

例
-

次のコードスニペットでは、データベースを非同期で開き (`IDBFactory`)、成功と失敗の場合にイベントを登録し、アップグレードが必要な場合には、新しいオブジェクトストアを生成しています (`IDBdatabase`)。 完璧に動作する例は、To-do Notifications アプリケーション (動く例を見る) を見てください。


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

// これら 2 個のイベントハンドラーは､データベースが正常に開かれたか､失敗した時に動作します｡
DBOpenRequest.onerror = (event) => {
  note.innerHTML += "<li>データベースの読み込みに失敗しました｡</li>";
};

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

  // データベースを開いた結果を変数 db に保存します｡
  // これは後でたくさん使います｡
  db = DBOpenRequest.result;

  // displayData() 関数を実行し、タスクリストに既に IDB にある全ての to-do リストデータを入れます。
  displayData();
};

// このイベントハンドラーは、新しいバージョンのデータベースの作成が必要なことを表すイベントを処理します。
// これは、データベースが作成されていないときや、上の行の window.indexedDB.open に
// 新しいバージョン番号が渡されたときです。

DBOpenRequest.onupgradeneeded = (event) => {
  const db = event.target.result;

  db.onerror = (event) => {
    note.innerHTML += "<li>データベースの読み込みに失敗しました｡</li>";
  };

  // IDBDatabase.createObjectStore を用いてデータベースにオブジェクトストアを作成します。

  const 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 with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* IndexedDB の使用
* トランザクションの開始 : `IDBDatabase`
* トランザクションの使用 : `IDBTransaction`
* キーの範囲の設定 : `IDBKeyRange`
* データの取得と変更 : `IDBObjectStore`
* カーソルの使用 : `IDBCursor`
* リファレンス例 : To-do Notifications (動く例を見る)