目次

IndexedDB を利用するシンプルなプログラムのコードと実行結果

目次

IndexDBのデータベースを開き、データを挿入して検索する一連のシンプルなデータベース操作のコードと実行結果を紹介します。

実装例

コード

以下の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);
      };
    }

    function InsertData() {
      const transaction = db.transaction(storename, "readwrite");
      const store = transaction.objectStore(storename);

      // データの追加
      store.add({ id: 1, name: "ぺんぎんクッキー", price: 280 });
      store.add({ id: 2, name: "しろくまアイス", price: 160 });
      store.add({ id: 3, name: "らくだキャラメル", price: 90 });
      store.add({ id: 4, name: "かるがもサブレ", price: 85 });
      store.add({ id: 5, name: "きりんキャンディー", price: 50 });

      transaction.oncomplete = function () {
        console.log("データベースにレコードを挿入しました。");
      };
    }

    function SelectData() {
      const transaction = db.transaction(storename, "readonly");
      const store = transaction.objectStore(storename);
      const getRequest = store.get(3); 

      getRequest.onsuccess = function () {
        if (getRequest.result) {
          console.log("レコード取得成功:", getRequest.result);

          var elem = document.getElementById("output");
          elem.innerHTML += getRequest.result.id + ", " + getRequest.result.name + ", " + getRequest.result.price + "<br/>";

        } else {
          console.log("指定された ID のレコードが見つかりませんでした。");
        }
      };
    }
  </script>


</head>
<body>
  <h2>openDatabase テストページ</h2>
  <a href="javascript:OpenMyDatabase();">OpenDatabase</a><br>
  <a href="javascript:InsertData();">InsertData</a><br>
  <a href="javascript:SelectData();">SelectData</a><br>
  <hr>
  <div id="output"></div>

</body>
</html>

解説

ページの最初のリンクをクリックすると以下のOpenMyDatabase()関数を呼び出し、 データベースを開き、オブジェクトストアを作成します。

    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);
      };
    }


ページの2番目のリンクをクリックすると。トランザクションとオブジェクトストアを取得し、データを追加します。

    function InsertData() {
      const transaction = db.transaction(storename, "readwrite");
      const store = transaction.objectStore(storename);

      // データの追加
      store.add({ id: 1, name: "ぺんぎんクッキー", price: 280 });
      store.add({ id: 2, name: "しろくまアイス", price: 160 });
      store.add({ id: 3, name: "らくだキャラメル", price: 90 });
      store.add({ id: 4, name: "かるがもサブレ", price: 85 });
      store.add({ id: 5, name: "きりんキャンディー", price: 50 });

      transaction.oncomplete = function () {
        console.log("データベースにレコードを挿入しました。");
      };
    }


3番目のリンクをクリックすると、トランザクションとオブジェクトストアを取得し、データを検索します。
検索はオブジェクトストア作成時に指定した{ keyPath: "id" } により、idの値で検索します。
検索出来た場合は、onsuccessイベントが呼び出されます。今回のコードでは、id="output"の要素にデータの値を表示します。

    function SelectData() {
      const transaction = db.transaction(storename, "readonly");
      const store = transaction.objectStore(storename);
      const getRequest = store.get(3); 

      getRequest.onsuccess = function () {
        if (getRequest.result) {
          console.log("レコード取得成功:", getRequest.result);

          var elem = document.getElementById("output");
          elem.innerHTML += getRequest.result.id + ", " + getRequest.result.name + ", " + getRequest.result.price + "<br/>";

        } else {
          console.log("指定された ID のレコードが見つかりませんでした。");
        }
      };
    }

実行結果

上記のHTMLをWebブラウザで開きます。下図のページが表示されます。
IndexedDB を利用するシンプルなプログラムのコードと実行結果:画像1

[OpenDatabase]のリンクをクリックします。オブジェクトストアを作成した旨のアラートダイアログが表示されます。
IndexedDB を利用するシンプルなプログラムのコードと実行結果:画像2

続いて[InsertData]リンクをクリックします。クリックするとデータがオブジェクトストアに挿入されます。
IndexedDB を利用するシンプルなプログラムのコードと実行結果:画像3

データ挿入後に[SelectData]リンクをクリックします。
IndexedDB を利用するシンプルなプログラムのコードと実行結果:画像4

検索が実行され、id=3 の要素の値 id=3 name="らくだキャラメル" price=90 の値がページに表示されます。
IndexedDB を利用するシンプルなプログラムのコードと実行結果:画像5

IndexDBのデータベースを開き、データを挿入して検索する一連のシンプルな動作を実装できました。

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