IndexedDB のオブジェクトストア (テーブル) を作成、削除するコードと実行結果

IndexedDB のオブジェクトストアを作成、削除するコードと実行結果を紹介します。

概要

こちらの記事ではIndexedDBのデータベースを開くコードを紹介しました。 この記事ではデータベースにデータを格納するオブジェクトストアを作成、削除するコードを紹介します。 オブジェクトストアはリレーショナルデータベースのテーブルと似た概念になります。

書式

オブジェクトストアの作成

(IDBDatabase オブジェクト).createObjectStore([オブジェクトストア名], [オプションオブジェクト]);


オプションオブジェクトには以下の値が利用できます。

{ KeyPath: "[キー名]" }

[キー名]のプロパティをキーとして利用します。

{ autoincrement : true }

キーが自動的にインクリメントされます。

オブジェクトストアの削除

(IDBDatabase オブジェクト).deleteObjectStore([オブジェクトストア名]);

オブジェクトストアの削除は、onupgradeneeded イベント内でしかできないため、 データベースのバージョンを上げて、 indexedDB.open()メソッドを呼び出した際に発生する onupgradeneededでdeleteObjectStoreを呼び出します。

実装例:オブジェクトストアの作成

コード

以下のHTMLファイルを作成します。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title></title>
  <script type="text/javascript">
    var dbname = "myDB";
    var storename = "myStore";
    var db;

    function OpenMyDatabase() {
      const request = indexedDB.open(dbname, 1);

      request.onupgradeneeded = function (event) {
        const db = event.target.result;
        // オブジェクトストアを作成
        if (!db.objectStoreNames.contains(storename)) {
          db.createObjectStore(storename, { keyPath: "id" });
          alert('オブジェクトストアを作成しました。');
        }
      };

      request.onsuccess = function (event) {
        db = event.target.result;
        alert('データベースをオープンしました。');
      }

      request.onerror = function (event) {
        console.error("データベースのオープンに失敗しました:", event.target.error);
      };
    }
  </script>
</head>
<body>
  <h2>IndexedDB データベースの削除 デモ</h2>
  <a href="javascript:DeleteMyDatabase();">データベースを開いてオブジェクトストアを作成する</a><br>
</body>
</html>

解説

indexedDB.open()メソッドを呼び出し、IDBOpenDBRequestオブジェクトを取得します。 IDBOpenDBRequest オブジェクトの onupgradeneeded イベントでオブジェクトのストア作成を実行します。~ db.objectStoreNames.contains(storename)により、すでにオブジェクトストアが作成されている場合は、 オブジェクトストアを作成しません。

  const request = indexedDB.open(dbname, 1);

  request.onupgradeneeded = function (event) {
    const db = event.target.result;
    // オブジェクトストアを作成
    if (!db.objectStoreNames.contains(storename)) {
      db.createObjectStore(storename, { keyPath: "id" });
      alert('オブジェクトストアを作成しました。');
    }
  };

実行結果

上記のHTMLをWebブラウザで表示します。下図のページが表示されます。ページ内のリンクをクリックします。
IndexedDB のオブジェクトストア (テーブル) を作成、削除するコードと実行結果:画像1

リンクをクリックすると、[オブジェクトストアを作成しました。]のダイアログが表示されます。
IndexedDB のオブジェクトストア (テーブル) を作成、削除するコードと実行結果:画像2

続いて[データベースをオープンしました。]のダイアログが表示されます。
IndexedDB のオブジェクトストア (テーブル) を作成、削除するコードと実行結果:画像3

なお、2回目のリンククリックでは、すでにオブジェクトストアが作成されているため、データベースをオープンした旨のダイアログのみが表示されます。
IndexedDB のオブジェクトストア (テーブル) を作成、削除するコードと実行結果:画像4
IndexedDB のオブジェクトストア (テーブル) を作成、削除するコードと実行結果:画像5

実装例:オブジェクトストアの削除

コード

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title></title>
  <script type="text/javascript">
    var dbname = "myDB";
    var storename = "myStore";
    var db;

    function OpenMyDatabase() {
      const request = indexedDB.open(dbname, 1);

      request.onupgradeneeded = function (event) {
        const db = event.target.result;

        // オブジェクトストアを作成
        if (!db.objectStoreNames.contains(storename)) {
          db.createObjectStore(storename, { keyPath: "id" });
          alert('オブジェクトストアを作成しました。');
        }
      };

      request.onsuccess = function (event) {
        db = event.target.result;
        alert('データベースをオープンしました。');
      }

      request.onerror = function (event) {
        console.error("データベースのオープンに失敗しました:", event.target.error);
      };
    }

    function DeleteObjectStore() {
      const request = indexedDB.open(dbname, 2);
      request.onupgradeneeded = function (event) {
        const db = event.target.result;

        if (db.objectStoreNames.contains(storename)) {
          db.deleteObjectStore(storename);
          alert(`オブジェクトストア '${storename}' を削除しました`);
          console.log(`オブジェクトストア '${storename}' を削除しました`);
        } 

      };
    }

  </script>
</head>
<body>
  <h2>IndexedDB オブジェクトストアの作成 デモ</h2>
  <a href="javascript:OpenMyDatabase();">データベースを開いてオブジェクトストアを作成する</a><br>
  <a href="javascript:DeleteObjectStore();">データベースを開いてオブジェクトストアを削除する</a><br>
</body>
</html>

解説

[オブジェクトストアを削除する]のリンクをクリックすると以下の関数を呼び出します。
indexedDB.open(dbname, 2); を実行し、バージョン番号を上げてデータベースを開きます。
onupgradeneededイベントが発生しますので、イベント内で削除したいオブジェクトストアが存在するかを確認し、 存在する場合に削除します。

  function DeleteObjectStore() {
    const request = indexedDB.open(dbname, 2);
    request.onupgradeneeded = function (event) {
      const db = event.target.result;

      if (db.objectStoreNames.contains(storename)) {
        db.deleteObjectStore(storename);
        alert(`オブジェクトストア '${storename}' を削除しました`);
        console.log(`オブジェクトストア '${storename}' を削除しました`);
      } 
    };
  }

実行結果

上記のHTMLページをWebブラウザで表示します。下図のページが表示されます。
IndexedDB のオブジェクトストア (テーブル) を作成、削除するコードと実行結果:画像6

はじめにオブジェクトストアを作成します。[オブジェクトストアを作成する]のリンクをクリックします。 オブジェクトストアを作成した旨のアラートダイアログが表示されます。
IndexedDB のオブジェクトストア (テーブル) を作成、削除するコードと実行結果:画像7
IndexedDB のオブジェクトストア (テーブル) を作成、削除するコードと実行結果:画像8

オブジェクトストアを削除します。[オブジェクトストアを削除する]のリンクをクリックします。
IndexedDB のオブジェクトストア (テーブル) を作成、削除するコードと実行結果:画像9

オブジェクトストアを削除した旨のアラートダイアログが表示されます。
IndexedDB のオブジェクトストア (テーブル) を作成、削除するコードと実行結果:画像10



AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2025-01-28
Copyright © 1995–2025 iPentec all rights reserverd.