HTML 5のローカルデータベース機能: SQLを実行してデータの格納/取得を行う
杉山貴章(オングス)
2008-12-19 08:00:00
クライアントサイド・データベースストレージに対してトランザクションを実行したら、コールバック関数に渡されたSQLTransactionオブジェクトに対してexecuteSql()メソッドを使うことでSQL文を実行することができる。
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オブジェクトから結果を取り出す方法は次回説明しよう。
- ホワイトペーパー

