PR

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のWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

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

Web SQL DatabaseとIndexed Database API | Think IT(シンクイット)

Think IT(シンクイット)

サイトに予期せぬエラーが起こりました。しばらくたってから再度お試しください。