SQlite の使い方
INTEGER で定義したカラムに
少数も入る(SQLITEが勝手に調整してくれる REAL型)
(例)
0.314の場合
取り出すとき getInt で取り出すと 0
getString で取り出すと "0.314"
となる。
① データベースを使う前の お決まり。
//データベースヘルパーのインスタンスを作成する
DatabaseHelper dbHelper = new DatabaseHelper(this);
//データベースopen
SQLiteDatabase db = dbHelper.getWritableDatabase();
この時にDBがなかったら、SQLiteOpenHelperが自動的に呼ばれてDBを作成する。
②SQLiteOpenHelper
(1)作り方
eclipuse の <ファイル><新規><クラス>
名前: DatabaseHelper
スーパークラス: android.database.sqlite.SQLiteOpenHelper
継承された抽象メソッド:ON (他はOFF)
(2) データベースの作成。テーブルの作成
名前とバージョンを変数で設定しておく。
private static final String DATABASE_NAME = "kaiwa.db";
private static final int DATABASE_VERSION = 1;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME,null,DATABASE_VERSION);
// TODO 自動生成されたコンストラクター・スタブ
}
@Override
public void onCreate(SQLiteDatabase db) {
/*テーブル作成 seantableという名前、中身は(id,narabi,sname)
注意:" "のあいだのスペース が多いとエラーになる。
「ソースありません」のエラー */
db.execSQL(
"CREATE TABLE seantable("+
" _id INTEGER PRIMARY KEY, "+
" narabi INTEGER, "+
" sname text not null "+
");");
//Test Row insert 初期データの投入例 IDは勝手につけられるので省略可
db.execSQL("INSERT INTO seantable( narabi,sname ) values ( 11,'空港');");
db.execSQL("INSERT INTO seantable( narabi,sname ) values ( 12,'機内');");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO 自動生成されたメソッド・スタブ
db.execSQL("drop table if exists " + "seantable");
}
これで、DBとテーブル完成。
onUpgrade ・・・ もしseantable があったら削除するの意味
お決まりで・・・
③順読みしてテーブルセット
これは単に順読みして entries というテーブルにセットする。
このあと LISTVIEW で表示とか・・・
非常に簡単、シンプル、で解りやすい例だ。
int i;
Cursor cursor =db.query( "seantable",new String { "_id", "narabi","sname" },null, null, null, null, null );
//データ数取得
int numRows = cursor.getCount();
//一番最初のデータの位置に移動
cursor.moveToFirst();
//entriesと言うテーブルをデータ数の分だけ作る
String entries = new String[numRows];
//データセット 2カラム目のsnameをセット
for( i = 0; i < numRows; i++ ){
entries[i] = cursor.getString(2);
cursor.moveToNext();
}
//使い終わったら、必ずクローズ
cursor.close();
//////////////////////////////////////////////////////DB更新
EditText et1 = (EditText) findViewById(R.id.editText1);
EditText et2 = (EditText) findViewById(R.id.editText2);
EditText et3 = (EditText) findViewById(R.id.editText3);
String edit_jp = et1.getText().toString();
String edit_en = et2.getText().toString();
String edit_note = et3.getText().toString();
//DB準備
DatabaseHelper dbHelper = new DatabaseHelper(this);
SQLiteDatabase db = dbHelper.getWritableDatabase();
// ContentValues準備(更新するデータ)
ContentValues values = new ContentValues();
values.put("kjp",edit_jp);
values.put("ken",edit_en);
values.put("knote",edit_note);
String str_id = "" + ktbedit_id;
db.update("ktable", values, "_id = ?",new String{str_id});
db.update DB更新処理
第一引数 テーブル名
引数2 values
引数3 更新データのkeyとなる項目
動的にしたい場合は "_id = ?" を使い
?はnew String{str_id});で指定する
////////////////////////////////////////////////////////DB 追加
// 挿入するデータはContentValuesに格納 ContentValues val = new ContentValues(); val.put( "name", name ); val.put( "age" , age ); // “name_book_table”に1件追加 db.insert( "name_book_table", null, val );
データの挿入には、SQLiteDatabaseクラスのinsert()メソッドを使用する。第1引数にはテーブル名を指定し、第2引数には取りあえず nullを指定する。第3引数は実際に挿入するデータの指定となるが、これはあらかじめContentValuesというデータクラスに格納した状態で渡 す。
/////////////////////////////////////////////削除
DatabaseHelper dbHelper = new DatabaseHelper(this);
SQLiteDatabase db = dbHelper.getWritableDatabase();
String str_id = "" + ktbedit_id;
db.delete( "ktable", "_id = ?",new String[]{str_id});
第2、第3引数は更新と一緒。
動的にしたい場合は "_id = ?" を使い
?はnew String[]{str_id});で指定する
incert
int i;
for( i = 1; i < nisuu+1; i++ ){
ContentValues v = new ContentValues(); //これは毎回設定
int yyyy = cal_sta.get(Calendar.YEAR);
int mm = cal_sta.get(Calendar.MONTH);
int dd = cal_sta.get(Calendar.DATE);
v.put("dtb_cnt",i);
v.put("dtb_yyyy",yyyy);
v.put("dtb_mm",mm);
v.put("dtb_dd",dd);
v.put("dtb_accent",0);
v.put("dtb_saiflg",0);
v.put("dtb_sainm"," ");
v.put("dtb_daia"," ");
v.put("dtb_daia_stahh",0);
v.put("dtb_daia_stamm",0);
v.put("dtb_daia_endhh",0);
v.put("dtb_daia_endmm",0);
v.put("dtb_y1" ," ");
v.put("dtb_y1_stahh",0);
v.put("dtb_y1_stamm",0);
v.put("dtb_y1_endhh",0);
v.put("dtb_y1_endmm",0);
v.put("dtb_y2" ," ");
db.insert("dtb", null, v);
cal_sta.add(Calendar.DATE, 1);
}