アプリ作って海外移住

コピペプログラマーのメモ

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" );