【ハウツー】
5月31日のGoogle Developer Dayで発表された新技術「Google Gears(以下、Gears)」。皆さんは既にお試しになっただろうか。ブラウザのプラグインというかたちでまったく新しいJavaScriptのAPIを提供するという発想に、今や世界中のギーク達が魅了されており、その可能性を追求すべく各地で熱心な研究が続けられている。
Gearsについて軽く触れておくと、Gearsの実体はIE(Microsoft Internet Explorer)、Firefoxで動作するブラウザのプラグインだ(将来的にはMac OS XのSafariもサポートされる)。以下のようなJavaScript APIを提供し、オフラインでも動作するWebアプリケーションの構築をサポートする。
このうち、ローカルサーバについては、こちらの記事で解説しているので参照していただきたい。Gearsのインストール方法や概要などは、こちらの記事が参考になるだろう。
今回はGearsの機能のうち、データベースモジュールを解説する。
では、ここからGearsが持つデータベースモジュールを詳しく解説したい。
Gearsは、内部にSQLiteというデータベースを同梱している。SQLiteは、通常のデータベースとは異なり、アプリケーションに組み込まれることを最初から想定したライブラリだ。非常にコンパクトながら、SQL92が持つ機能の多くが実装済みで、トランザクションは勿論のこと、ビューやトリガーもサポートしている。
Gearsをインストール済みのブラウザ上では、JavaScriptを用いてSQLiteにアクセスすることができる。つまり、JavaScriptコードからSQLを発行して、データベースの操作を行えるということだ。Gearsでは、ほんの少しの例外を除いて、SQLiteで使用できるクエリをほぼ全て使用することができる。SQLiteが持つSQLのシンタックスは、こちらのリファレンス(英語)を参照するとよい。
Gearsによるデータベースアクセス方法は、JDBCなどによく似ているため習得するのは容易だ。以下に、そのほとんどを網羅した疑似的なコードを掲載するので参考にしてほしい。
<!-- (1) gears_init.jsを読み込んで、Gearsのセットアップ -->
<script type="text/javascript" src="gears_init.js"></script>
<script type="text/javascript">
// (2) データベースオブジェクトの作成
var db = google.gears.factory.create('beta.database', '1.0');
// (3) DBのオープン
db.open("DB名");
// (4) SQLの実行。create table文なども可能
db.execute("insert into test ...");
// (5) SELECTクエリの実行。
var rs = db.execute("select * from test where id = ?", [1]);
try {
// (6) 検索結果をループし、処理を行う
while (rs.isValidRow()) {
// (7) 結果セットから値を取得
var indexedField = rs.field(0);
var namedField = rs.fieldByName("named");
...
// (8) ResultSetのカーソルを進める
rs.next();
}
} finally {
if (rs) rs.close(); // (9) 結果セットのクローズ
}
db.close(); // DBのクローズ。別に行わなくとも良い
</script>
ポイントを簡単におさらいしておこう。
(1) gears_init.jsの読み込みは、Gearsを使用するWebアプリケーション全てが行わねばならない。このJavaScriptの入手方法などは後述する。
(2) データベースに限らず、GearsのAPIはコアとなるオブジェクトをgoogle.gears.factory.create("識別子", "バージョン")というAPIで作成するところから始まる。このコードにより、Databaseクラスのインスタンスを取得できる。
(3) データベースのオープンはDatabase#open("データベース名")を使用する。任意の文字列をデータベースの名前として指定することができる。
(4) Database#executeメソッドを用いてSQLを発行している。Gearsでは、検索クエリ(select)も、データ操作文(insert、update、delete)も同じくexecuteメソッドを用いて発行する。
(5) Database#executeメソッドを用いて、プレースホルダ(「?」)付きのSQLを発行している。JDBCにおけるPreparedStatementと同様の考え方だ。executeメソッドのシグネチャは、Database#execute("SQL", [プレースホルダに対応する引数])となっており、第二引数は配列で指定する。SQLインジェクションというセキュリティホールを回避するためにも、プレースホルダの使用は推奨される。selectクエリを実行した場合は、戻り値はResultSetクラスのインスタンスだ。
(6) 検索結果をループする処理は、ResultSet#isValidRow()メソッドがtrueを返す間、という条件式を用いる。JDBCにおけるjava.sql.ResultSetとはAPIが異なる。
(7) ResultSet#field(int)を用いると、結果セット内の列インデックスを指定して値を取得できる。ResultSet#fieldByName(String)は、結果セット内の列名を指定して値を取得する。
(8) ResultSet#next()を呼び出して、結果セット内のカーソルを進める。このメソッドを呼び忘れると、whileループが無限ループになってしまうので要注意だ。
(9) ResultSet#close()メソッドを用いて結果セットをクローズしている。この例のように、finally節を用いてクローズするのが順当な方法だろう。
| 120Hz SHVカメラ用イメージセンサーを使った撮像装置 - SHVフルスペック化へ [18:10 5/25] |
| 京大、視覚による物体認知は前頭前野からのトップダウン信号が重要と確認 [17:45 5/25] |
| 製品数の拡大だけでなくBCPの展開なども含めた総合力で事業の強化を図るTI [17:25 5/25] |
| 東大、動物の生殖周期を制御する脳内活動とホルモン分泌の周期性を発見 [17:10 5/25] |
| 飲酒時にトマトを食べると、血中アルコール濃度が低下 - カゴメなどが確認 [16:48 5/25] |
|
上海問屋、iPhoneとほぼ同じ薄さのバッテリ内蔵ヘッドホンアンプ [19:05 5/25] パソコン |
|
15秒で日陰を作る! ワンタッチ設営のレジャーシェード発売 [18:53 5/25] ライフ |
|
ASUS、Intel Z77チップセット搭載のワークステーション用ATXマザーボード [18:52 5/25] パソコン |
|
節電効果が数字で見える「スマートハイム・ナビ」の機能強化 - 積水化学工業 [18:52 5/25] ライフ |
|
MSI、チップセットにIntel H77/B75を搭載した低価格マザーボードを2モデル [18:51 5/25] パソコン |
4つの診断で、自分の適性を見つめなおそう!
働くこと・挑戦し続けることへの思いを綴ったインタビュー
あなたにピッタリのアドバイスを読むことができます。
転職に必要な情報が収集できます
企業からアプローチのメッセージが届きます。