Goodroid

GoodroidはAndroidアプリ開発のための情報をコラムやブログで紹介するサイトです。


データベースを作成する
ここでは、内部ストレージのアプリケーション領域にデータベースを作成する方法を確認していきます。

サンプルプログラムを実行すると「/data/data/goodroid.sample.database/database」ディレクトリ配下に「sample.db」というデータベースが作成されます。

確認の仕方はEclipseであれば、「ウィンドウ」>「パースペクティブを開く」>「DDMS」

から「ファイル・エクスプローラー」タブを選択し、目的のパッケージ名ディレクトリを展開していきます。

DatabaseActivity.java
package goodroid.sample.database;

import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;

public class DatabaseActivity extends Activity {

    private DBHelper helper = new DBHelper(this);

    public static SQLiteDatabase db;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // 読み書き可能なデータベースをオープンする
        //(読み取り専用の場合はgetReadableDatabase()を用いる)
        db = helper.getWritableDatabase();
    }

    @Override
    public void onDestroy(){
    	super.onDestroy();
    	helper.close();
    }
}

DBHelperクラスの「 onCreate 」メソッドはデータベースを作成したタイミングで呼び出されます。

サンプルコードでは、このタイミングでデータベースにテーブルを作成し、初期データを挿入しています。

ちなみに、2回目以降のアプリ起動では、すでにデータベースが存在する場合「 onCreate 」メソッドは呼び出されません。つまり、データベースの存在チェックがいらないのです。

一方「 onUpgrade 」メソッドは、機能追加で新しいテーブルを追加するなど、データベースをバージョンアップしたい場合に処理を記述します。※サンプルでは何も処理はしていません。

DBHelper.java
package goodroid.sample.database;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBHelper extends SQLiteOpenHelper{

    // データベースの名称
    private final static String DB_NAME = "sample.db";

    // データベースのバージョン
    private final static int DB_VER = 1;

    public DBHelper(Context context) {
        // sample.dbというDBを作成
        super(context, DB_NAME, null, DB_VER);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

    // データベース作成時の処理を記述する。

        // テーブルを作製
        String sql =  "CREATE TABLE mytable ( " +
 	                "id integer primary key autoincrement, " +
		        "name text not null, " +
	 		"price integer not null )";
    // SQL文の実行
        db.execSQL(sql);

        // データを挿入
        db.execSQL("INSERT INTO mytable(name, price) VALUES ('りんご', 100)");
        db.execSQL("INSERT INTO mytable(name, price) VALUES ('みかん', 50)");
        db.execSQL("INSERT INTO mytable(name, price) VALUES ('すいか', 1000)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // データベースのアップグレード時の処理を記述する。
    }
}


▼メモリ上にデータベースを作成する場合

今回は内部ストレージにデータベースを作成しましたが、メモリ上にデータベースを作成することもできます。
その場合は下記のサンプルコードの様に、コンストラクタの第2引数をnullにします。

    public DBHelper(Context context) {
        // メモリ上にDBを作成
        super(context, null, null, DB_VER);
    }

実行結果

3006 views | コメント:0 | 2012-07-07
コメント
まだこの記事にコメントはありません
コメントの投稿
名前 (必須)

メールアドレス (非公開)

本文(必須)

パスワード (必須)
(半角数字4桁)