libro
www.tuyano.com
JavaScriptによるHTML5プログラミング入門

Web SQL Database APIによるデータベース・アクセス (2/6)

作成:2010-07-17 16:58
更新:2010-07-17 16:58

■executeSqlによるクエリーの実行

では、transactionのコールバック関数内で、実際にデータベースにアクセスをするにはどうすればよいか。これは、引数で渡されるSQLトランザクション・オブジェクトにある「executeSql」というメソッドを利用します。

このメソッドは、引数に「SQLステートメント」「配列」「成功時のコールバック関数」「エラー時のコールバック関数」といったものを渡します。SQLステートメントというのは、SQLで実行する命令文です。SQLデータベースでは、簡単なコマンドをテキストで用意して実行します。

ではそのあとの配列は? これは、SQLステートメントで利用する値が格納されたものなのです。executeSqlでは、SQLステートメントの中に?記号を埋め込み、その後の配列から値をそこに埋め込んで実行できるようになっています。そのためのものなのです。

その後には、SQLステートメントを実行後、処理がきちんと実行できた時と、エラーになった時で、それぞれ呼び出されるコールバック関数が用意されます。これらのコールバック関数では、それぞれ以下のような値が引数に渡されます。

成功時の関数――SQLトランザクション・オブジェクトと、実行結果として送り返されるデータを管理する「結果オブジェクト」というオブジェクトが渡されます。

失敗時の関数――SQLトランザクション・オブジェクトと、エラーの内容を表すメッセージが渡されます。

成功した場合には、SQLトランザクションと共に「結果オブジェクト」というものが返されます。SQLステートメントでは、データベースからデータを取得するようなコマンドもあります。こうしたとき、取得されたデータを管理するものとして結果オブジェクトが用意されます。ここから順にデータを取り出し処理できるようになっているのです。

では、この結果オブジェクトから順にデータを取り出すにはどうすればよいのでしょうか。下に簡単なfor文の書き方をあげておきました。結果オブジェクトには「rows」というプロパティがあり、ここに各データをひとまとめにしたものが保管されています。データの個数は、rowsの「length」で得ることができます。

rowsにある各データは、rows[番号] または rows.item(番号) といった形でデータを取り出すことができます。JavaScriptの基本から考えて、rows[番号]でよいと思いますが、こちらで動作確認したChrome5では、item(番号)にしないとうまく動きませんでした。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※SQLの実行
トランザクション.executeSql( クエリー, 配列, 成功時処理, 失敗時処理 );

※成功時のコールバック関数
function 関数名 ( SQLトランザクション, 結果セット ){ ……処理…… }

※失敗時のコールバック関数
function 関数名 ( SQLトランザクション, エラーメッセージ ){ ……処理…… }

※結果オブジェクトからデータを順に取得する
for(var i = 0; i < 結果.rows.length; i++) {
    …… 結果.rows.item(i) でデータを取得する……
}
※関連コンテンツ

「JavaScriptによるHTML5プログラミング入門」に戻る