Androidアプリ作成日記

プログラミング初心者が、Androidアプリを作ります

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

  1. --/--/--(--) --:--:--|
  2. スポンサー広告

家計簿アプリその7、データベース・基礎

いよいよデータベースに入っていきます。これはかなり難しそうです。
その前に、データの保存方法を見ていきます。

データの保存方法は、主に3つあり、「プリファレンス」、「ローカルファイル」、「データベース」です。


プリファレンスは、int型やString型などの、単発の値を保存するときに使います。
家計簿アプリでは、項目欄などに使えそうです。
ローカルファイルは、複数の行など、プリファレンスよりは長いデータを保存するときに使います。
txtファイルに保存して使うようなので、なにか設定値をまとめたいときに使えそうです。
で、今回のデータベース。これは複雑なデータを多く扱いたいときに使います。
家計簿アプリの出費等のデータは毎日使うので、このデータベースを使います。

データベースは、オープン→読み取り・書込み→クローズ、という手順です。
オープン処理をするため、SubOpenHelperクラスを作ります。

[SubOpenHelper.java]

public class SubOpenHelper extends SQLiteOpenHelper {

	// コンストラクタ
  	public SubOpenHelper(Context c,String dbname,int version){
  			super(c,dbname,null,version);
        //第一引数は、データベースを所有するコンテキストオブジェクトを指定。
        //第二引数は、DBファイル名。保存場所。
        //data/data/<パッケージ名>/database/<ファイル名>に保存される。
  	//nullにすると、メモリ内に保存される。
        //第三引数は、不明。とりあえずnull。
        //第四引数は、DBのバージョンで、作成するときに指定。今は1。
        //データベース管理のために使うらしい。
    }

	// データベースが一番最初に作られたときの処理
	// コンストラクタに渡されたDBファイル名が存在しない場合に呼ばれる
	@Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "";
        sql += "create table Date_Table (";
        //テーブルの名前
        sql += "_id integer primary key autoincrement";
        //_idはカラム名。一意に決まる。1,2,3と格納されるため、integer型。
        //重複禁止のため、primary key。autoincrementとは、一度割り当てられた
        //値を削除されても再度は使われないようにするもの。
        sql += ",Koumoku text not null";
        sql += ",Utiwake text";
        sql += ",Kingaku text";
        //それぞれ項目の名前。not nullは、nullと入れるとエラーになる。
        sql += ")";
        db.execSQL(sql);
    }


[Kakeibo.java]

// ボタンクリック時の処理
public void onClick(View v) {
 if (v==button2){

  // 正常軌道時 
  try{
   // クラスのインスタンス化
    SubOpenHelper helper = new SubOpenHelper(getApplicationContext(),"test.db",1);
    //コンストラクタのデータを決める。コンテキスト、DBファイル名、バージョン。

    // データベースの設定 
    SQLiteDatabase db;
    db = helper.getWritableDatabase();
    //データベースに書き込めるように設定
    db.execSQL("insert into  Date_Table(Koumoku,Utiwake,Kingaku) values ('食事', 'ステーキ',1000);");
    //insertで行に追加
    text1.setText("");
    //text1の初期化

    // カーソルの設定 
    String[] cols = {"Koumoku","Utiwake","Kingaku"};
    Cursor c = db.query("Date_Table",cols,null, null, null, null, null,null);
    //カーソルのリストを作る。1:テーブル名、2:取得する列名(カラム等)の配列、
    //3&4:取得するレコードの条件、5:GROUP BY条件、6:「HAVING」条件、
    //7:「ORDER BY」条件、8:「limit」条件
    boolean isEof = c.moveToFirst();
    //カーソルを先頭に移動
    while (isEof) {
    //while文。カーソルが最後に行くまで繰り返す。
    text1.append(c.getString(0));
    text1.append(c.getString(1));
    text1.append(String.valueOf(c.getInt(2)));
    //getString(0)メソッドで、カーソルの一行目を追加。2,3も同じ。
    isEof = c.moveToNext();}
    //次のリストにカーソルを移す。
    c.close();
    //終わったら閉じる。これがないとエラーとなる。データベースも。
    db.close();
   }

   // 異常終了時
   catch(SQLiteException e){
    text1.setText("エラー");
    return;
   }
  }


細かくはコメントで記述しました。全体の流れとしては、
1.最初にbutton2を押したときに、データベースをオープン
2.SubOpenHelperクラスの、サブクラスonCreateによって、テーブルの定義を作成
3.insertメソッドで、データをテーブルに追加
4.queryメソッドで、カーソルリストのデータを読み込む
って感じです。ただこれはあらかじめ決められた値を入れてるだけなので、
次はKoumoku.javaから取得した値をデータベースに入れるプログラムを作ります。


Androidアプリ開発ランキング

  1. 2011/02/26(土) 17:44:56|
  2. 家計簿アプリ
  3. | トラックバック:0
  4. | コメント:0
<<家計簿アプリその8、データベース・ソート | ホーム | プロフィールのアイコン>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://andromaker.blog98.fc2.com/tb.php/44-0586df38
この記事にトラックバックする(FC2ブログユーザー)


カテゴリ

家計簿アプリ (15)
アプリ作成 (練習) (7)
プログラム用語 (1)
エラー (3)
環境設定 (8)
サイト関連 (3)
雑談 (9)
ニュース (1)
未分類 (2)
書籍紹介 (1)
iPhone (1)

Android書籍

スマートにプログラミング
Android入門編


初歩からわかるAndroid
最新プログラミング


Google Android
プログラミング入門


AndroidアプリUIデザイン
&プログラミング


Android SDK
逆引きハンドブック

月別アーカイブ

最新コメント

最新トラックバック

最新記事

RSSリンクの表示

カウンター

アクセスランキング

アクセスランキング

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。