libro
www.tuyano.com
PhoneGapによるAndroid/iPhoneアプリ開発入門

Databaseオブジェクトによるデータベース・アクセス (6/7)

作成:2012-04-23 09:49
更新:2012-04-23 09:49

■レコードの取得・検索

続いて、レコードを取得する場合についての説明です。下のリスト欄に、2つのレコード取得のパターンについてスクリプトをまとめておきました。ここでは以下の4つの関数が用意されています。

queryDB――すべてのレコードを取得するSQLを実行します。
findDB――titleフィールドに検索テキストを含むレコードだけを探すSQLを実行します。
querySuccess――SQLの実行が終了した後のコールバック関数です。取り出したレコードの情報をテキストにまとめ表示します。
errorCB――エラー処理です。

queryDB、findDBのいずれも「レコードをとり出す」という点は同じですから、その後の処理はどちらもquerySuccess関数で行なっています。では、実行しているSQLを見てみましょう。

・全レコードを取得
SELECT * FROM テーブル
これですべてのレコードを取得できます。非常に単純ですね。レコード取得の基本はこの形です。この後に、必要に応じていろいろと条件が追加されます。

・特定の条件を設定してレコードを取得
SELECT * FROM テーブル WHERE 条件の指定
何らかの条件を指定して、その条件にあうレコードだけを取り出したい場合には、基本形の後に「WHERE」をつけ、その後に条件を既述します。

問題は「条件って何?」ということでしょう。これは、大抵の場合、「等号・不等号」を使った式を書きます。このような形ですね。
フィールド名 = 値
これで、指定のフィールドの値が右辺の値であるレコードのみ取り出せます。等号だけでなく、< >といった不等号記号も使えます。例えば、「num > 100」とすれば、numというフィールドの値が100より大きいものだけを取り出せるわけです。

この他、テキストの検索には「あいまい検索」というものもあります。これは「like」というものを使います。例えば、「title like "this%"」とすると、titleの値が「this」で始まるものだけを探します。値の指定で使っている「%」という記号は、ワイルドカードというもので、「ここにはどんな値も入れていいよ」というもの。つまり「this%」なら、「thisの後に何か書いてあるものは全部」という意味になります。

●executeSqlの引数について

ところで、今回、SQLを実行しているexecuteSqlでは、前回までと引数の指定が違っていますね。SQL文を指定する第1引数の後にいくつもついています。これは以下のようになっています。
executeSql( SQLクエリー, 配列,コールバック関数, 例外時の処理 );
SQLクエリー――実行するSQL文ですね。これは今までと同じです。
配列――SQL文の中に「?」記号を埋め込んでおき、ここに配列で値を用意すると、配列の値を順番に?のところに埋め込んでSQL文を完成させてくれます。
コールバック関数――実行が完了した後で呼び出されるコールバック関数です。
例外時の処理――エラーになった時の処理です。

成功した時に呼び出されるコールバック関数も、引数が増えています。ここでは以下のように定義されていますね。
function querySuccess(tx, results) {……略……}
第1引数はSQLTransactionオブジェクトですが、第2引数は「SQLResultSet」というオブジェクトです。このオブジェクトの中に、必要なデータがまとめられます。長くなるので、このへんは、実際にサンプルを作って説明をしましょう。

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

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

●プログラム・リスト●

// ※全レコードを取得する
function queryDB(tx) {
	tx.executeSql('SELECT * FROM MYMEMO', [], querySuccess, errorCB);
}

// ※titleに指定のテキストを含むレコードを取得する
function findDB(tx){
	var title = 検索テキスト ;
	tx.executeSql('SELECT * FROM MYMEMO WHERE title LIKE ?', [title], querySuccess, errorCB);
}

// 取得したレコードの表示
function querySuccess(tx, results) {
	……取り出したレコードの処理を用意する……
}
// エラー処理
function errorCB(err) {
	console.log("Error processing SQL: " + err.code);
}
※関連コンテンツ

「PhoneGapによるAndroid/iPhoneアプリ開発入門」に戻る