Class: Sql

Sql

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: