アプリ作って海外移住

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

SQlite の使い方

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