AndroidStudio・データベース

管理の仕方が分からなくて困った話

データベースの記述自体は結構情報が多い

大きいデータを扱う際に必要になってくるデータベース、

コードは探したら見つかるんで記述するのはそんなに難しく無いんです。

 

ですが私が困ったのはそこじゃなくて作ってからの話です、これは意外と探しても見つからなかったんで今回ちょっとおさらいしてみました。

 

まずはデータベースクラスのテンプレを作ってみます。

public class DatabaseHelper extends SQLiteOpenHelper {

    private static final String db.name = "ファイル名"
    private static final int    db.ver  = 1       // 起動時のバージョン

    //コンストラクタ
    public DatabaseHelper(Context context) {
        super(context, db_name, null, db_version);
    }
    // 初回生成
    @Override
    public void onCreate(SQLiteDatabase db) {
    }
    // アップグレード時
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
    // ダウングレード時(あんま使わない)
    @Override
    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
}

 

とりあえず完成しました。

仕組みを説明するとこのクラスをインスタンスした時にまずコンストラクタが動きます、ここは毎回動きます。

 

コンストラクタが動いた後は onCreate が動きます。

onUpgradeやonDowngradeは動きません。

この状態でsql文を書き込みます、これもテンプレで紹介されているので困ることは無いでしょう。

public class DatabaseHelper extends SQLiteOpenHelper {

    private static final String db.name = "ファイル名"
    private static final int    db.ver  = 1       // 起動時のバージョン

    //コンストラクタ
    public DatabaseHelper(Context context) {
        super(context, db_name, null, db_version);
        
        //テーブル作って情報入れてみた
        db.execSQL("create table NewTable(" + 
        "_id integer primary key autoincrement" + 
        ", str text )");

        db.execSQL("insert into NewTable(str) values('a')");
    }
    // 初回生成
    @Override
    public void onCreate(SQLiteDatabase db) {
    }
    // アップグレード時
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
    // ダウングレード時(あんま使わない)
    @Override
    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
}

 

この状態でもう一度起動します。

すると作成したはずのテーブルを使おうとしても出てきません、私はここで捕まりましたw

 

データベースの onCreateに関して

 

アクティビティの onCreate は起動する毎に動きます。

それに対してデータベースのonCreateは最初の一回しか動きません。

要するにインストールした時の最初の一回だけなんですね。

なのでこれ以降は、onCreateに何を書いてもアンインストールするか、初期化しない限りは更新されません。

 

では、アプリを消さずにデータを更新するにはどうしたらいいんでしょうか?

 

データの更新を行う

 

新たに情報を追加したい時は onUpgrade に記述すれば大丈夫です。

ですが、2回目以降は ライフサイクルはどれも基本動きません。

バージョンを変更する

 

まず、コンストラクタで、前回と今回のバージョンを比べます。

その時お互いのバージョンが変わっている時の最初の1回だけ、onUpgradeが起動します。

public class DatabaseHelper extends SQLiteOpenHelper {

    private static final String db.name = "ファイル名"
    private static final int    db.ver  = 2       // 起動時のバージョン 1から2に変更

    //コンストラクタ
    public DatabaseHelper(Context context) {
        super(context, db_name, null, db_version);
    }

//------------------- 省略 -----------------------------
   
    // アップグレード時 更新したいデータはここに記述する
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //テーブル作って情報入れてみた
        db.execSQL("create table NewTable(" + 
        "_id integer primary key autoincrement" + 
        ", str text )");

        db.execSQL("insert into NewTable(str) values('a')");
    }
}

 

バージョンが1から2になっているのが分かりますか?

ここは開発者側が、新しくデータを追加した時に毎回書き換えないといけません。

間違って修正する時もその度に書き換えないといけないので更新する時は注意してください。

 

以上、データベースに関してでした。

Comments

Add Your Comments

Contact Us
Let us find the perfect source code for your app.

Become a PieceX Insider!