recursal/MDN huggingface dataset:
IDBObjectStore: getKey() メソッド
=============================

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

キーが正常に見つかった場合は、その構造化複製を作成し、要求オブジェクトの `result` に設定します。

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

構文
--


```js
getKey(key)
```

### 引数

`key`

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

### 返値

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

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

### 例外

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

`InvalidStateError` `DOMException`

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

`TransactionInactiveError` `DOMException`

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

`DataError` `DOMException`

与えられたキーまたはキー範囲が無効なキーを含むとき投げられます。

例
-


```js
let openRequest = indexedDB.open("telemetry");
openRequest.onsuccess = (event) => {
  let db = event.target.result;
  let store = db.transaction("netlogs").objectStore("netlogs");

  let today = new Date();
  let yesterday = new Date(today);
  yesterday.setDate(today.getDate() - 1);
  let request = store.getKey(IDBKeyRange(yesterday, today));
  request.onsuccess = (event) => {
    let when = event.target.result;
    alert(`直近 24 時間で最初のアクティビティは ${when} に発生しました。`);
  };
};
```

仕様書
---

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

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

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

`IDBObjectStore` インターフェイスの **`count()`** メソッドは、`IDBRequest` オブジェクトを返し、別スレッドで、指定されたキーまたは `IDBKeyRange` にマッチするレコードの総数を返します。引数が指定されない場合は、オブジェクトストア内の全レコードの数を返します。

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

構文
--


```js
count()
count(query)
```

### 引数

`query` 省略可

数えたいレコードの範囲を指定するキーまたは `IDBKeyRange` オブジェクトです。

### 返値

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

操作に成功した場合は、この要求の `result` プロパティの値は与えられたクエリーにマッチするレコードの数になります。

### 例外

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

`InvalidStateError` `DOMException`

この `IDBObjectStore` が削除されているとき投げられます。

`TransactionInactiveError` `DOMException`

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

`DataError` `DOMException`

指定されたキーまたはキー範囲が無効であるとき投げられます。

例
-

このシンプルな断片では、トランザクションを生成し、オブジェクトストアを取得し、`count()` を用いてオブジェクトストア内のレコードを数えます。`success` ハンドラーが実行された時、コンソールにカウント値 (整数) を記録します。


```js
const transaction = db.transaction(["fThings"], "readonly");
const objectStore = transaction.objectStore("fThings");

const countRequest = objectStore.count();
countRequest.onsuccess = () => {
  console.log(countRequest.result);
};
```

仕様書
---

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

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

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

`IDBObjectStore` インターフェイスの **`put()`** メソッドは、データベース内の指定のレコードを更新するか、指定のアイテムが存在しない場合は新規レコードを挿入します。

このメソッドは `IDBRequest` オブジェクトを返し、別スレッドで、値の構造化複製を作成し、この複製をオブジェクトストアに格納します。これは、トランザクションモードが `readwrite` のとき、オブジェクトストアに新規レコードを追加するか既存レコードを更新する用です。レコードが正常に格納されると、返された要求オブジェクトで、`result` が格納されたレコードのキーに設定され、`transaction` がオブジェクトストアが開かれたトランザクションに設定された `success` イベントが発火します。

`put` メソッドは *更新または挿入を行う* メソッドです。
 *挿入のみを行う* メソッドは、`IDBObjectStore.add` メソッドを参照してください。

更新したいレコードを指す `IDBCursor` があるときは、`IDBObjectStore.put()` を用いるよりも `IDBCursor.update()` で更新を行うほうがよいことを覚えておいてください。そうすることで、新規レコードを挿入するのではなく、既存のレコードを更新することが明確になります。

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

構文
--


```js
put(item)
put(item, key)
```

### 引数

`item`

更新 (または挿入) を行いたいアイテムです。

`key` 省略可

更新したいレコードの主キーです。(たとえば `IDBCursor.primaryKey` から取得できます)

### 返値

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

操作に成功した場合は、この要求の `result` プロパティの値は新しいレコードのキーまたは更新したレコードのキーになります。

### 例外

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

`ReadOnlyError` `DOMException`

この操作に対応するトランザクションが読み取り専用モードのとき投げられます。

`TransactionInactiveError` `DOMException`

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

`DataError` `DOMException`

以下のいずれかの条件を満たすとき投げられます。

* オブジェクトストアでインラインキーを使用しているかキージェネレーターが存在し、かつ引数 `key` が指定されたとき。
* オブジェクトストアがアウトラインキーを用いかつキージェネレーターも存在せず、引数 `key` が指定されないとき。
* オブジェクトストアがインラインキーを用いているが `key` ジェネレーターは存在せず、オブジェクトストアのキーパスが有効なキーを生成しないとき。
* 引数 `key` が指定されたが、有効なキーでないとき。

`InvalidStateError` `DOMException`

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

`DataCloneError` `DOMException`

保存されるデータが内部の構造化複製アルゴリズムで複製できなかったとき投げられます。

例
-

以下の例では、レコードタイトルを指定した要求を行います。要求に成功すると、`onsuccess` 関数で (`objectStoreTitleRequest.result` から利用可能な) `IDBObjectStore` から対応するレコードを取得し、レコードのプロパティ 1 個を更新し、更新したレコードを `put()` を用いた別の要求によりオブジェクトストアに書き戻します。動く例全体は、To-do Notifications アプリケーションを参照してください。(動く例を見る)


```js
const title = "Walk dog";

// いつも通りトランザクションを開く
const objectStore = db
  .transaction(["toDoList"], "readwrite")
  .objectStore("toDoList");

// タイトルがこの title である to-do リストのオブジェクトを取得する
const objectStoreTitleRequest = objectStore.get(title);

objectStoreTitleRequest.onsuccess = () => {
  // 結果として返されたデータオブジェクトを取得する
  const data = objectStoreTitleRequest.result;

  // オブジェクトの notified の値を "yes" に更新する
  data.notified = "yes";

  // アイテムをデータベースに書き戻す別の要求を生成する
  const updateTitleRequest = objectStore.put(data);

  // この要求を開始したトランザクションを記録する
  console.log(
    `この要求を開始したトランザクションは ${updateTitleRequest.transaction}`,
  );

  // 新しい要求が成功したら、再び displayData() 関数を実行し、表示を更新する
  updateTitleRequest.onsuccess = () => {
    displayData();
  };
};
```

仕様書
---

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

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

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

`IDBObjectStore` インターフェイスの **`getAll()`** メソッドは、指定の引数にマッチするすべてのオブジェクト、または引数が与えられない場合はすべてのオブジェクトが入った `IDBRequest` オブジェクトを返します。

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

このメソッドは、以下の場合に同じ結果になります。

* レコードがデータベースに存在しない場合
* レコードの値が `undefined` の場合

これらを区別するには、以下のメソッドを使用できます。

1. `openCursor()` メソッドを同じキーで使用します。このメソッドはレコードが存在すればカーソルを返し、存在しなければカーソルを返しません。
2. `count()` メソッドを同じキーで使用します。このメソッドは行が存在すれば 1 を、存在しなければ 0 を返します。
構文
--


```js
getAll()
getAll(query)
getAll(query, count)
```

### 引数

`query` 省略可

問い合わせを行うキーまたは `IDBKeyRange` です。何も渡さない場合、デフォルトはオブジェクトストア内の全レコードを選択するキー範囲です。

`count` 省略可

複数の値が見つかった場合に返す値の数を指定します。`0` 未満の場合や `2^32 - 1` 超の場合は、`TypeError` 例外が投げられます。

### 返値

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

操作に成功した場合は、この要求の `result` プロパティの値は与えられた問い合わせにマッチする全レコード (`count` が指定された場合は `count` の数まで) の値の `Array` になります。

### 例外

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

`TransactionInactiveError` `DOMException`

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

`DataError` `DOMException`

指定のキーまたはキー範囲が無効なキーを含むか `null` であるとき投げられます。

`InvalidStateError` `DOMException`

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

`TypeError`

引数 `count` が `0` から `2^32 - 1` の範囲 (両端を含む) にないとき投げられます。

仕様書
---

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

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

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

`IDBObjectStore` インターフェイスの読み取り専用プロパティ **`keyPath`** は、このオブジェクトストアのキーパスを返します。

このプロパティが `null` の場合は、アプリケーションは変更操作のたびにキーを指定しなければなりません。

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

値
-

任意のデータ型です。

例
-

以下のコード断片では、データベースの読み書きトランザクションを開き、`add()` を用いてデータをオブジェクトストアに追加します。オブジェクトストアの生成後、コンソールに `objectStore.keyPath` を記録します。動く例全体は、To-do Notifications アプリケーションを参照してください。(動く例を見る)


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

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

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

  // addData() 関数を実行し、データをデータベースに追加する
  addData();
};

function addData() {
  // IDB に挿入できる新しいオブジェクトを生成する
  const newItem = [
    {
      taskTitle: "Walk dog",
      hours: 19,
      minutes: 30,
      day: 24,
      month: "December",
      year: 2013,
      notified: "no",
    },
  ];

  // 読み書きトランザクションを開き、データを追加する準備をする
  const transaction = db.transaction(["toDoList"], "readwrite");

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

  transaction.onerror = (event) => {
    note.innerHTML +=
      "<li>トランザクションはエラーのため開けませんでした。アイテムは重複させられません。</li>";
  };

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

  // オブジェクトストアに newItem オブジェクトを追加する要求を行う
  const objectStoreRequest = objectStore.add(newItem[0]);

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

仕様書
---

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

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

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

`IDBObjectStore` インターフェイスの **`deleteIndex()`** メソッドは、バージョンの更新時に用いられ、接続中のデータベース内の指定した名前のインデックスを破棄します。

なお、このメソッドは `VersionChange` トランザクションモードのコールバックからのみ呼び出せます。また、このメソッドは `IDBObjectStore.indexNames` プロパティを同期的に変更します。

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

構文
--


```js
deleteIndex(indexName)
```

### 引数

`indexName`

削除する既存のインデックスの名前です。

### 返値

なし (`undefined`)

### 例外

`InvalidStateError` `DOMException`

このメソッドが `versionchange` トランザクションモードのコールバックから呼ばれていないとき投げられます。

`TransactionInactiveError` `DOMException`

この `IDBObjectStore` が属するトランザクションが実行中でない (たとえば、削除されたか取り除かれた) とき投げられます。

`NotFoundError` `DOMException`

指定された名前のインデックス (大文字と小文字を区別します) がデータベースに無いとき投げられます。

例
-

以下の例では、より高いバージョン番号のデータベースが読み込まれたときにデータベースの構造を更新する `onupgradeneeded` のハンドラーがあります。`IDBObjectStore.createIndex` を用いてオブジェクトストアに新しいインデックスを作成し、その後 `deleteIndex()` を用いて不要な古いインデックスを削除します。動く例全体は、To-do Notifications アプリケーションを参照してください。(動く例を見る)


```js
let db;

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

// 以下の 2 個のイベントハンドラーは、データベースを開くのに成功したか、失敗した時に動く
DBOpenRequest.onerror = (event) => {
  note.innerHTML += "<li>データベース読み込みエラー</li>";
};

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

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

  // displayData() 関数を実行し、IDB に格納済の to-do リストデータすべてをタスクリストに入れる
  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 });

  objectStore.deleteIndex("seconds");
  objectStore.deleteIndex("contact");
};
```

仕様書
---

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

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

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

`IDBObjectStore` インターフェイスの **`delete()`** メソッドは、`IDBRequest` オブジェクトを返し、別スレッドで指定のレコードまたはレコード群を削除します。

キーまたは `IDBKeyRange` を渡すことができ、これによってオブジェクトストアから 1 個または複数のレコードを削除できます。オブジェクトストア内の全レコードを削除するには、`IDBObjectStore.clear` を使用してください。

`IDBCursor` を使用している場合は、`IDBCursor.delete()` メソッドを用いることで現在のレコードをより効率よく削除できることを覚えておいてください。この方法では、レコードのキーを明示的に検索せずにすみます。

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

構文
--


```js
delete(key)
```

### 引数

`key`

削除するレコードのキー、もしくはキーが範囲内のレコードをすべて削除する `IDBKeyRange` です。

### 返値

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

操作に成功した場合は、この要求の `result` プロパティの値は `undefined` になります。

### 例外

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

`TransactionInactiveError` `DOMException`

このオブジェクトストアのトランザクションが実行中でないとき投げられます。

`ReadOnlyError` `DOMException`

このオブジェクトストアのトランザクションのモードが読み取り専用のとき投げられます。

`InvalidStateError` `DOMException`

このオブジェクトストアが削除済のとき投げられます。

`DataError` `DOMException`

`key` が有効なキーでもキー範囲でもないとき投げられます。

例
-

以下のコード断片では、To-do Notifications サンプルアプリケーションの一部である `deleteItem()` 関数を紹介しています。このアプリケーションは、to-do リストの項目を IndexedDB を用いて保存します。このアプリケーションのコード全体を GitHub で見ることも、動くアプリケーションを試すこともできます。

`deleteItem()` 関数は、ユーザーが to-do リストの項目を削除する項目をクリックすると呼び出されます。アイテムキーはボタンの `'data-task'` データ属性で設定されるので、削除するアイテムを特定できます。この関数はデータベースのトランザクションを開き、その中でキーを指定してアイテムを削除します。トランザクションの完了時、この関数はアプリケーションの UI を更新してアイテムが削除されたことを報告します。

なお、この関数内で使われる `db` はアプリケーションの読み込み時に初期化され、`IDBDatabase` オブジェクトを参照するグローバル変数です。


```js
function deleteItem(event) {
  // 削除するタスクの名前を取得する
  let dataTask = event.target.getAttribute("data-task");

  // データベースのトランザクションを開始し、タスクを上で取得した名前で検索して削除する
  let transaction = db.transaction(["toDoList"], "readwrite");
  let request = transaction.objectStore("toDoList").delete(dataTask);

  // データアイテムが削除されたことを報告する
  transaction.oncomplete = () => {
    // ボタンの親 (リストアイテム) を削除し、表示を消す
    event.target.parentNode.parentNode.removeChild(event.target.parentNode);
    note.innerHTML += `<li>タスク "${dataTask}" が削除されました。</li>`;
  };
}
```

仕様書
---

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

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

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

`IDBObjectStore` インターフェイスの **`name`** プロパティは、このオブジェクトストアの名前を表します。

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

値
-

このオブジェクトストアの名前を表す文字列です。

### 例外

オブジェクトストアの名前を変更しようとすると、以下の例外が発生する可能性があります。

`InvalidStateError` `DOMException`

オブジェクトストアが削除済か、現在のトランザクションがアップグレードトランザクションでないとき投げられます。インデックスの名前の変更はアップグレードトランザクション (`versionchange` モード) でのみ可能です。

`TransactionInactiveError` `DOMException`

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

`ConstraintError` `DOMException`

オブジェクトストアで既に指定された `name` が使用中のとき投げられます。

例
-

以下のコード断片では、データベースの読み書きトランザクションを開き、`add()` を用いてデータをオブジェクトストアに追加します。オブジェクトストアの生成後、コンソールに `objectStore.name` を記録します。動く例全体は、To-do Notifications アプリケーションを参照してください。(動く例を見る)


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

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

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

  // addData() 関数を実行し、データをデータベースに追加する
  addData();
};

function addData() {
  // IDB に挿入できる新しいオブジェクトを生成する
  const newItem = [
    {
      taskTitle: "Walk dog",
      hours: 19,
      minutes: 30,
      day: 24,
      month: "December",
      year: 2013,
      notified: "no",
    },
  ];

  // 読み書きトランザクションを開き、データを追加する準備をする
  const transaction = db.transaction(["toDoList"], "readwrite");

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

  transaction.onerror = (event) => {
    note.innerHTML +=
      "<li>トランザクションはエラーのため開けませんでした。アイテムは重複させられません。</li>";
  };

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

  // オブジェクトストアに newItem オブジェクトを追加する要求を行う
  const objectStoreRequest = objectStore.add(newItem[0]);

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

仕様書
---

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

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

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

`IDBObjectStore` インターフェイスの `getAllKeys()` メソッドは、オブジェクトストア内の指定の引数にマッチするすべてのオブジェクトに対応するレコードキー、もしくは引数が与えられない場合はすべてのオブジェクトに対応するレコードキーを取得する `IDBRequest` を返します。

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

このメソッドは、以下の場合に同じ結果になります。

* レコードがデータベースに存在しない場合
* レコードの値が `undefined` の場合

これらを区別するには、`openCursor()` を同じキーで呼ぶ必要があります。このメソッドは、レコードが存在すればカーソルを返し、存在しなければカーソルを返しません。

構文
--


```js
getAllKeys()
getAllKeys(query)
getAllKeys(query, count)
```

### 引数

`query` 省略可

`IDBKeyRange` またはそれに解決される値です。

`count` 省略可

複数の値が見つかったときに返す値の数を指定します。`0` 未満や `2^32 - 1` 超の場合は、`TypeError` 例外が投げられます。

### 返値

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

操作に成功した場合は、この要求の `result` プロパティの値は与えられた問い合わせにマッチする全レコード (`count` が指定された場合は `count` の数まで) のキーの `Array` になります。

### 例外

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

`TransactionInactiveError` `DOMException`

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

`DataError` `DOMException`

与えられたキーまたはキー範囲が無効なキーを含むか `null` であるとき投げられます。

`InvalidStateError` `DOMException`

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

仕様書
---

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

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

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

`IDBObjectStore` インターフェイスの **`openCursor()`** メソッドは、`IDBRequest` オブジェクトを返し、別スレッドで新しい `IDBCursorWithValue` オブジェクトを返します。カーソルを用いてオブジェクトストアを走査するのに用います。

追加を行う操作が正常に完了したかを判定するには、結果の `success` イベントを監視してください。

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

構文
--


```js
openCursor()
openCursor(query)
openCursor(query, direction)
```

### 引数

`query` 省略可

問い合わせを行うキーまたは `IDBKeyRange` です。単一の有効なキーが渡された場合は、そのキーのみを含む範囲になります。何も渡されない場合は、オブジェクトストア内の全レコードを選択するキー範囲になります。

`direction` 省略可

カーソルが動く方向を決める文字列です。デフォルトは `next` です。以下の値が有効です。

`next`

カーソルはオブジェクトストアの最初で開き、キーの昇順で重複を含むすべてのレコードを返します。

`nextunique`

カーソルはオブジェクトストアの最初で開き、キーの昇順で重複を除いたすべてのレコードを返します。

`prev`

カーソルはオブジェクトストアの最初で開き、キーの降順で重複を含むすべてのレコードを返します。

`prevunique`

カーソルはオブジェクトストアの最初で開き、キーの降順で重複を除いたすべてのレコードを返します。


### 返値

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

操作に成功した場合は、この要求の `result` プロパティの値は以下になります。

* 与えられたクエリーにマッチする最初のレコードを指す `IDBCursorWithValue` オブジェクト
* マッチするレコードが見つからなかった場合は `null`
### 例外

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

`InvalidStateError` `DOMException`

この `IDBObjectStore` または `IDBIndex` が削除済のとき投げられます。

`TransactionInactiveError` `DOMException`

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

`DataError` `DOMException`

指定されたキーまたはキー範囲が無効であるとき投げられます。

例
-

以下のシンプルな断片では、トランザクションを生成し、オブジェクトストアを取得し、カーソルを用いてオブジェクトストア内の全レコードを走査します。


```js
const transaction = db.transaction("name", "readonly");
const objectStore = transaction.objectStore("name");
const request = objectStore.openCursor();
request.onsuccess = (event) => {
  const cursor = event.target.result;
  if (cursor) {
    // cursor.value に走査中の現在のレコードが入っている
    // ここで結果を用いて何かする
    cursor.continue();
  } else {
    // もう結果は無い
  }
};
```

仕様書
---

| Specification |
| --- |
| Indexed Database API 3.0 # ref-for-dom-idbobjectstore-opencursor② |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

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

`IDBObjectStore` インターフェイスの読み取り専用プロパティ **`autoIncrement`** は、このオブジェクトストアのオートインクリメントフラグの値を返します。

なお、各オブジェクトストアにそれぞれ別のオートインクリメントカウンターがあります。

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

値
-

以下の論理値です。

| 値 | 意味 |
| --- | --- |
| `true` | オブジェクトストアはオートインクリメントを行います。 |
| `false` | オブジェクトストアはオートインクリメントを行いません。 |

例
-

以下のコード断片では、データベースの読み書きトランザクションを開き、`add()` を用いてデータをオブジェクトストアに追加します。オブジェクトストアの生成後、コンソールに `objectStore.autoIncrement` を記録します。動く例全体は、To-do Notifications アプリケーションを参照してください。(動く例を見る)


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

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

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

  // addData() 関数を実行し、データをデータベースに追加する
  addData();
};

function addData() {
  // IDB に挿入できる新しいオブジェクトを生成する
  const newItem = [
    {
      taskTitle: "Walk dog",
      hours: 19,
      minutes: 30,
      day: 24,
      month: "December",
      year: 2013,
      notified: "no",
    },
  ];

  // 読み書きトランザクションを開き、データを追加する準備をする
  const transaction = db.transaction(["toDoList"], "readwrite");

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

  transaction.onerror = (event) => {
    note.innerHTML +=
      "<li>トランザクションはエラーのため開けませんでした。アイテムは重複させられません。</li>";
  };

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

  // オブジェクトストアに newItem オブジェクトを追加する要求を行う
  const objectStoreRequest = objectStore.add(newItem[0]);

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

仕様書
---

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

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

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