new Sql()
指定されたSQLステートメントを実行するクラス
このオブジェクトは自分でnewすることはありません。
h5.api.sqldb.open().sql()を呼び出すと、このクラスのインスタンスが返されます。
- Source:
Methods
execute() → {Promise}
このオブジェクトに設定された情報からSQLステートメントとパラメータを生成し、SQLを実行します
実行結果は、戻り値であるPromiseオブジェクトのprogress()に指定したコールバック関数または、done()に指定したコールバック関数に、実行結果を保持するオブジェクトが返されます。
実行結果オブジェクトは、以下のプロパティを持っています。
プロパティ名 | 説明 |
rows | 検索(SELECT)を実行した場合、このプロパティに結果が格納されます。 |
insertId | 登録(INSERT)を実行した場合、このプロパティに登録したレコードのIDが格納されます。 |
rowsAffected | 削除(DELETE)や更新(UPDATE)した場合、このプロパティに変更のあったレコードの件数が格納されます。 |
例.検索結果の取得
db.sql('SELECT * FROM USER').execute().done(function(rs) { rs.rows // SQLResultSetRowList rs.insertId // Number rs.rowsAffected // Number });
SQLResultSetRowListは、以下のプロパティを持っています。
プロパティ名 | 説明 |
length | 検索にマッチしたレコードの件数 |
rows | 検索結果 |
例.検索結果の取得する
db.sql('SELECT ID, NAME FROM USER').execute().done(function(rs) { rs.rows.item(0).ID // 検索にマッチした1件目のレコードのID rs.rows.item(0).NAME // 検索にマッチした1件目のレコードのNAME });また、progress()に指定したコールバック関数の第二引数には、トランザクションオブジェクトが格納され、このオブジェクトを使用することで、トランザクションを引き継ぐことができます。
例.同一トランザクションでdb.insert()とdb.sql()を実行する
db.select('PRODUCT', ['ID']).where({NAME: 'ball'}).execute().progress(function(rs, tx) { db.sql('UPDATE STOCK SET PRICE = 2000', tx).where({ID: rs.item(0).ID}).execute(); });db.select().execute()で返ってきたトランザクションを、db.sql()の第三引数に指定することで、db.select()とdb.sql()は同一トランザクションで実行されます。 *
ver1.1.8からの変更点
execute()が返すPromiseオブジェクトのprogressコールバックの第二引数(TransactionalExecutorインスタンス)に、 Select/Insert/Del/Update/Sqlインスタンスをaddすることができるようになりました。下記のサンプルコードは、tx.add()で追加したStatementインスタンスを、一番最初に実行したdb.select()と同一トランザクションでSQLを実行します。
db.select('PRODUCT', ['ID']).where({NAME:'ballA'}).execute().progress(function(rs, tx) { tx.add(db.sql('SELECT COUNT FROM STOCK WHERE ID = '+ rs.item(0).ID')).execute().done(function(rs2) { alert(rs2.rows.item(0).COUNT); }); });
Returns:
Promiseオブジェクト
- Type
- Promise
- Source: