【android】【sqlite】できるだけsql文を利用してselectする

androidのsqlite周りを最近はよく触っている。
select文を利用するときは.query()か.rawQuery()を使うのだけど、
前者は引数が大分長いのが個人的に使いづらそう…

Cursor query(boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) 

ここに詳しくあるけど、
要は引数でsql文のORDER BY句やGROUP BY句など指定できるというもの。
慣れたら便利かもしれないけど、可読性に難がある気が….!

なので、SQL文に慣れている人は.rawQuery()の方が直感的かもしれない。
こちらは文字通り生のSQLを扱えるよ、というメソッド。(こことか詳しいです)

.rawQuery( SQL文 , SQL文内の「?」を任意の値にかえる );

実際に指定したらこんな感じか

//DB(読出用)のオブジェクト生成
SQLiteDatabase dbRead = helper.getReadableDatabase();

//SQL文
String sql    = "SELECT `_id` FROM user_tag WHERE `tag_name` = ?";
           
//SQL文の実行
Cursor cursor = dbRead.rawQuery(sql , new String[]{tag_name});

ちなみに第二引数で指定している「?」はnullにすることもできる。
その場合は直接sqlに書いてしまえばよい。(こっちの方が分かりやすいかも)
やってることは上記のものと同じです。

//DB(読出用)のオブジェクト生成
SQLiteDatabase dbRead = helper.getReadableDatabase();

//SQL文
String sql    = "SELECT `_id` FROM user_tag WHERE `tag_name` = '" + tag_name + "'";
            
//SQL文の実行
Cursor cursor = dbRead.rawQuery(sql , null);

あとはcursorで_idの値を取得すればOK

//カーソル開始位置を先頭にする
cursor.moveToFirst();

//(.moveToFirstの部分はとばして)for文を回す
for (int i = 1; i <= cursor.getCount(); i++) {
    //SQL文の結果から、必要な値を取り出す
    id = cursor.getInt(0);
    cursor.moveToNext();
}

ただ、上記は単に「_id」というカラムだけを取り出すためにcursorを使っていることになる。
無駄な気がするし、もっとスマートな方法がありそうなので、もう少し調べてみる、、