Class: Select

Select

new Select()

指定されたテーブルに対して、検索処理(SELECT)を行うクラス

このオブジェクトは自分でnewすることはありません。
h5.api.sqldb.open().select()を呼び出すと、このクラスのインスタンスが返されます。

Source:

Methods

(static) orderBy(orderBy) → {Select}

ORDER BY句を設定します

ソート対象のカラムが一つの場合は文字列、複数の場合は配列で指定します。

例.IDを降順でソートする場合

db.select('USER', '*').orderBy('ID DESC');
例.IDを降順、NAMEを昇順でソートする場合
db.select('USER', '*').orderBy(['ID DESC', 'NAME ASC']);
なお、複数の条件が指定されている場合、ソートは配列の先頭に指定されたカラムから順番に実行されます。
Parameters:
Name Type Description
orderBy Array | String 条件
Returns:
Selectオブジェクト
Type
Select
Source:

(static) where(whereObj) → {Select}

WHERE句を設定します

条件は以下の方法で設定できます。

  • オブジェクト
  • 文字列
オブジェクトの場合、キーに『カラム名[半角スペース]オペレータ』、バリューにを指定します。

例. IDが0以上100以下。

db.select('USER', '*').where({
	'ID >': 0,
	'ID <=': 100
})
オペレータで使用可能な文字は以下の通りです。
  • <=
  • <
  • >=
  • >
  • =
  • !=
  • like (sqliteの仕様上大文字・小文字を区別しない)
条件を複数指定した場合、全てAND句で結合されます。 AND句以外の条件で結合したい場合は文字列で条件を指定して下さい。

エスケープ文字の指定方法
キーに『カラム名[半角スペース]オペレータ[半角スペース]エスケープ文字』のように指定します。
エスケープ文字はクォートやダブルクォートで囲わず、エスケープ文字のみ指定して下さい。

例. $をエスケープ文字として指定する場合

db.select('USER', '*').where({
	'NAME like $': 'SUZUKI$'
});

文字列の場合、SQLステートメントに追加するWHERE文を指定します。

例. IDが0以上100以下。

db.select('USER', '*').where('ID >= 10 AND ID <= 100');
Parameters:
Name Type Description
whereObj Object | String 条件
Returns:
Selectオブジェクト
Type
Select
Source:

execute() → {Promise}

このオブジェクトに設定された情報からSQLステートメントとパラメータを生成し、SQLを実行します

実行結果は、Promiseオブジェクトのprogress()に指定したコールバック関数または、done()に指定したコールバック関数に、検索結果を保持するインスタンスが返されます。

検索結果へのアクセスは以下のように実行します。

 db.insert('USER', {ID:10, NAME:'TANAKA'}).execute().done(function(rows) {
 rows.item(0).ID     // 検索にマッチした1件目のレコードのID
 rows.item(0).NAME   // 検索にマッチした1件目のレコードのNAME
 });
また、progress()に指定したコールバック関数の第二引数には、トランザクションオブジェクトが格納され、このオブジェクトを使用することで、トランザクションを引き継ぐことができます。
 db.select('PRODUCT', ['ID']).where({NAME: 'ball'}).execute().progress(function(rs, tx) {
 db.update('STOCK', {PRICE: 2000}, tx).where({ID: rs.item(0).ID}).execute();
 });
db.select().execute()で返ってきたトランザクションを、db.update()の第三引数に指定することで、db.selec()とdb.update()は同一トランザクションで実行されます。

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.select('STOCK', ['COUNT']).where({ID: rs.item(0).ID})).execute().done(function(rows) {
   alert(rows.item(0).COUNT);
  });
 });
Returns:
Promiseオブジェクト
Type
Promise
Source: