Web SQL DatabaseとIndexed Database API

2010年10月29日(金)
藤本 壱

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命令を実行した場合)
1969年生まれ。神戸大学工学部電子工学科卒。ソフトメーカー勤務後、フリーライターとして独立。現在では、パソコン関係およびマネー関係の書籍を中心に執筆活動を行っている。ブログ「The blog of H.Fujimoto」は、Movable TypeやWordPressの情報を中心に毎日更新している(http://www.h-fj.com/blog/)。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています