HTML 5のローカルデータベース機能: SQLを実行してデータの格納/取得を行う

杉山貴章(オングス)
2008-12-19 08:00:00
  • このエントリーをはてなブックマークに追加

executeSql()メソッドでSQL文を実行する

 Databaseオブジェクトのtransaction()メソッドを実行し、正常にトランザクションが開始されると、第1引数に指定されたトランザクション・コールバック関数にSQLTransactionオブジェクトが渡される。このSQLTransactionオブジェクトのexecuteSql()というメソッドを呼び出すことによって、ローカルDBに対してSQLが発行される。

 executeSql()メソッドには次の引数を指定する。第1引数以外は省略することが可能。

  • 第1引数: 実行したいSQL文(文字列で)
  • 第2引数: SQL文中のプレースホルダに対する引数の配列
  • 第3引数: SQLステートメント・コールバック関数
  • 第4引数: SQLステートメント・エラー・コールバック関数

 第1引数に渡すSQL文では「?」によるプレースホルダを使用することができる。この場合、「?」の部分は第2引数で指定された値に置換される。例えばリスト1であれば、実際に実行されるSQL文は「INSERT INTO sampletable VALUES (123, 'ziddy')」となる。

リスト1 executeSql()メソッドではSQL文の指定にプレースホルダを使用可能

var id = 123;
var name = 'ziddy';
tx.executeSql("INSERT INTO sampletable VALUES (?, ?)", [id name]);

 SQLステートメント・コールバック関数が指定されている場合、SQL文を実行したSQLTransactionオブジェクトと、実行結果を格納したSQLResultSetオブジェクトがこの関数に渡される。またもしSQLの実行に失敗した場合には、第4引数に指定されたSQLステートメント・エラー・コールバック関数にSQLTransactionオブジェクトとSQLErrorオブジェクトが渡される。第4引数が指定されていない場合にはトランザクションは自動的にロールバックされる。

 リスト2はAddressListテーブルに対してSELECT命令を実行する例である。AddressListテーブルが存在しない場合は自動的に作成する。

リスト2 executeSql()メソッドでデータを取得する例

db.transaction(function(tx) {
    tx.executeSql('CREATE TABLE IF NOT EXISTS AddressList(name TEXT, address TEXT)');
    tx.executeSql('SELECT * FROM AddressList', [], 
        function(tx, rs) {
          // SQLResultSetからデータを取り出す
        }, 
        function(tx, error) {
          // エラー処理
        }
    );
});

 SQLResultSetオブジェクトから結果を取り出す方法は次回説明しよう。

  • 新着記事
  • 特集
  • ブログ
このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]