SQlite データの抽出 queryで検索 Cursorから取り出す
WHERE句 SQLITE文字列連結は ||
cursor = db.query( "dtb",
columns,
"dtb_yyyy || dtb_mm || dtb_dd >= ?" + " and " + "dtb_yyyy || dtb_mm || dtb_dd <= ?",
new String[]{ key_sta , key_end},
null, null, "dtb_yyyy ASC , dtb_mm ASC , dtb_dd ASC , _id ASC" );//昇順ASC 降順 DESC
= | 等しい |
---|---|
>= | 以上 |
> | より大きい |
<= | 以下 |
< | より小さい |
<> または != | 等しくない |
BETWEEN a AND b | a以上b以下 |
NOT BETWEEN a AND b | a以上b以下を除いた部分 |
// DBオープン
//データベースヘルパーのインスタンスを作成する
DatabaseHelper dbHelper = new DatabaseHelper(this);
//データベースオブジェクトを取得する 書き込み可能 で
SQLiteDatabase db = dbHelper.getWritableDatabase();
//ktableのseanno=snopos を抽出、その時narabino _idが小さい順に
int i;
Cursor cursor = null;
cursor = db.query( "ktable",
new String[] { "_id", "seanno" , "narabino" , "kjp" , "ken" , "knote" },
"seanno = ?",
new String[]{ "" + snopos },
null,
null,
"narabino , _id"); //////orderby の複数指定
//Cursor cursor =
// db.query("ktable",new String[]{ "_id" , "seanno" , "kjp" },null,null,
// null,null,null);
// テーブル名称、カラムは全部読み込む、WFERE句 seanno=snopos、null、null、order by 句 narabi昇順
final int numRows = cursor.getCount();
final int ktbdsp_id[] = new int [numRows];
final int ktbdsp_seanno[] = new int [numRows];
final int ktbdsp_narabino[] = new int [numRows];
final String ktbdsp_kjp[] = new String[numRows];
final String ktbdsp_ken[] = new String[numRows];
final String ktbdsp_knote[] = new String[numRows];
cursor.moveToFirst();
for( i = 0; i < numRows; i++ ){
// 検索結果をCursorから取り出す
ktbdsp_id[i] = cursor.getInt(0);
ktbdsp_seanno[i] = cursor.getInt(1);
ktbdsp_narabino[i] = cursor.getInt(2);
ktbdsp_kjp[i] = cursor.getString(3);
ktbdsp_ken[i] = cursor.getString(4);
ktbdsp_knote[i] = cursor.getString(5);
cursor.moveToNext();
}
// Cursorを忘れずにcloseする
cursor.close();
第1引数には検索対象のテーブル名を指定する(省略不可)。
第2引数には取得するカラム名を指定する。これはnullを与えて省略できる(その場合、テーブルの全カラムが取得されることになる)。
第3引数には、検索条件を記述する。
第4引数で検索条件に埋め込むパラメータをString型の配列で 指定する。
第3引数の検索条件は、SQLのWhere句に当たり、この例では“age=?”としている。この“?”と書いている部分が、第4引数で指定し た文字列に置き換わる。
検索条件には、複数の埋め込みパラメータを設定できる。例えば、名前と年齢の両方が一致するデータを検索したい場合は以下のようになる。
- 第3引数:"name=? and age=?"
- 第4引数:new String{ name, age }
query()の残りの引数は、SQLのgroup by句、having句、order by句などに当たる。今回は取りあえずnullを指定しておく。
第7引数 order by句 複数指定は ”hhhhhh , jjjjjjjjjj" カンマ区切り
age asc 昇順 省略可
age desc 降順
-----------------------------複数条件での抽出
cursor = db.query( "dttbl",new String { "_id", "dttbl_year","dttbl_month","dttbl_day",
"dttbl_saiflg","dttbl_sainm",
"dttbl_daia","dttbl_daiatxcolor","dttbl_daiabgcolor",
"dttbl_y1_stah","dttbl_y1_stam","dttbl_y1_endh","dttbl_y1_endm","dttbl_y1_yotei",
"dttbl_y2_stah","dttbl_y2_stam","dttbl_y2_endh","dttbl_y2_endm","dttbl_y2_yotei",
"dttbl_y3_yotei" },
"dttbl_year =?" + " and " +"dttbl_month =?",
new String{ "" + TARGET_YYYY,""+TARGET_MM },
null, null, "_id" );
--------------------------------------------------------------------------------------------------
Cursor cursor = null;
String columns = new String{"_id","dtb_cnt","dtb_yyyy",
"dtb_mm" ,
"dtb_dd ",
"dtb_accent",
"dtb_saiflg",
"dtb_sainm",
"dtb_daia",
"dtb_daia_stahh",
"dtb_daia_stamm",
"dtb_daia_endhh",
"dtb_daia_endmm",
"dtb_y1",
"dtb_y1_stahh",
"dtb_y1_stamm",
"dtb_y1_endhh",
"dtb_y1_endmm",
"dtb_y2"};
cursor = db.query( "dtb",
columns,
"dtb_yyyy =?" + " and " +"dtb_mm =?",
new String{ "" + TARGET_YYYY,""+TARGET_MM },
null, null, "dtb_cnt" );