SQLiteDatabase.query()で色々な値を取得する方法

AndroidのSQLiteDatabaseでquery()を使ってデータを取得する場合の覚書。

パラメータ

ここに詳しく書いてある

Cursor query(boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) 
  • 引数distinctには、trueを指定すると検索結果から重複する行を削除します。
  • 引数tableには、テーブル名を指定します。
  • 引数columnsには、検索結果に含める列名を指定します。nullを指定すると全列の値が含まれます。
  • 引数selectionには、検索条件を指定します。
  • 引数selectionArgsには、検索条件のパラメータ(?で指定)に置き換わる値を指定します。
  • 引数groupByには、groupBy句を指定します。
  • 引数havingには、having句を指定します。
  • 引数orderByには、orderBy句を指定します。
  • 引数limitには、検索結果の上限レコードを数を指定します。

where句

whereはSelectionとSelectionArgsを設定しましょう。値を設定する場所を「?」に、設定する値をSelectionArgsに入れます。

	String selectStr = "id=?";
	String[] selectArg = { "0" };
	Cursor c = db.query(TABLE_NAME, null, selectStr, selectArg, null, null, null);

sort

sortはorderByに指定しましょう。複数指定することも可能だそうです。

	String orderStr = "price desc, create_date desc";
	Cursor c = db.query(TABLE_NAME, null, null, null, null, null, orderStr);

limit, offsetの指定

limitに値を設定しましょう。limitの値を設定すると言いながらoffsetもここに設定します。書き方はoffset, limitの順番です。

	String limitStr = String.valueOf(offset) + "," + String.valueOf(limit);
	Cursor c = db.query(ENTRY_TABLE_NAME, null, null, null, null, null, null, limitStr);

まとめ

簡単なのはQuery使ってやればいいけど、複雑なことはexecSQL()でやったほうが捗ると思う。