Web SQL DatabaseとIndexed Database API

HTML5では、API群が整備され、データベース関係のAPIも充実します。これによって、これまでよりも柔軟なWebアプリケーションを作れるようになるでしょう。今回は、それらのAPIの中から、「Web SQL Database」と「Indexed Database API」の2つを取り上げます。Web

藤本 壱

2010年10月29日 20:00

HTML5では、API群が整備され、データベース関係のAPIも充実します。これによって、これまでよりも柔軟なWebアプリケーションを作れるようになるでしょう。今回は、それらのAPIの中から、「Web SQL Database」と「Indexed Database API」の2つを取り上げます。

Web SQL Databaseの概要

第4回では、Web Storageを紹介しました。Web Storageは、シンプルなデータベースAPIで、Cookieの代わりとして使うなどの使い道があります。ただし、単純なキー・バリュー型のデータベースなので、検索などの複雑な処理には向いていません。Webアプリケーションの中で本格的なデータベース処理を行うには、Web Storageでは機能的に不十分です。

そこで、「Web SQL Database」と呼ぶデータベースAPIが提案されています。Web SQL Databaseは、「SQL」と名前に入っていることから分かるように、リレーショナル・データベースを扱えるAPIです。データベースの各種の操作をSQLで記述できるので、かなり複雑な検索が可能であり、Webアプリケーションのさまざまなデータを保存するのに適しています。

ただし、リレーショナル・データベースの世界では、製品ごとに、SQLに細かな文法の違いがあり、互換性を保ちきれない面があります。同様のことがWeb SQL Databaseでも起こることが予想されるため、Webブラウザ・ベンダーによってWeb SQL Databaseに対する温度差があります。ちなみに、現在のWebブラウザでは、Safari 5/Google Chrome 7β/Opera 10.62はWeb SQL Databaseに対応していますが、Internet Explorer 9βとFirefox 4βは対応していません。

このようなことから、本記事の執筆時点では、仕様策定が停滞しています。W3CのWeb SQL Databaseの仕様を見ると、「This specification has reached an impasse」(この仕様は袋小路に入った)といった記述があります。

本記事では、Web SQL Databaseも取り上げますが、最終的には正式採用に至らなくなる可能性もあり得ますので、その点はご容赦ください。

Web SQL Databaseでの基本的な処理の流れ

Web SQL Databaseでデータベースを操作するには、データベースを開いた後、トランザクション(一連のSQL)を実行する、という流れを取ります。

データベースを開くには、「openDatabase」という関数を使います。書き方は以下の通りです。各パラメータの意味は表1の通りです。また、戻り値はデータベースを指すオブジェクトになります。そのオブジェクトは変数に代入しておいて、後でメソッドを実行する際に使います。

openDatabase(データベース名, バージョン, 表示名, 見込み容量)

表1: openDatabase関数のパラメータ

パラメータ名内容
データベース名データベースに付ける名前
バージョンデータベースのバージョン番号
このパラメータを指定した場合、データベースのバージョンがパラメータ値に合っていなければ、データベースを開くことができない
このパラメータに空文字を指定すれば、バージョンに関係なくデータベースを開くことができる
表示名ユーザーに見せるデータベースの名前
Webブラウザによってはデータベース管理機能があることもあり、その画面にはこの名前が表示されることがある
見込み容量データベースにおおむね見込まれる容量(バイト単位)


トランザクションを実行するには、データベースのオブジェクトの「transaction」というメソッドを使います。

データベース.transaction(コールバック, エラー時コールバック, 成功時コールバック)

「コールバック」には、データベースに対する各種の処理を行う関数を指定します。この関数には、パラメータとして、トランザクションを指すオブジェクトが渡されます。

一連のデータベース処理がすべて成功すると、「成功時コールバック」に指定した関数が実行されます。一方、データベース処理の途中で失敗があると、「エラー時コールバック」の関数が実行されます。この関数には、パラメータとしてエラー内容を指すオブジェクトが渡されます(表2)。

表2: エラー内容を表すオブジェクト

プロパティ内容
codeエラー・コード
messageエラー・メッセージ


コールバックの中でSQLを実行するには、トランザクション・オブジェクトの「executeSql」というメソッドを実行します。

トランザクション.executeSql(SQL文, 値, 成功時コールバック, 失敗時コールバック)

パラメータの内容は、表3の通りです。

表3: executeSqlメソッドのパラメータ

パラメータ名内容
SQL文実行するSQLの文
値SQL文に「?」でプレース・ホルダーを入れる場合に、そのプレース・ホルダーを置き換える値の配列
成功時コールバックSQLの実行に成功した時に実行する関数
エラー時コールバックSQLの実行に失敗した時に実行する関数


SQLの実行に成功すると、「成功時コールバック」で指定した関数が実行され、トランザクションのオブジェクトと、処理結果を表すオブジェクト(表4)が渡されます。

表4: 処理結果を表すオブジェクト

プロパティ内容
insertIdレコードのID(INSERT命令を実行した場合)
rowsAffected影響があったレコードの数(UPDATE/DELETE命令を実行した場合)
rows読み込んだレコードの配列(SELECT命令を実行した場合)

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30