データーベースをアップグレードするには

SQLiteDatabaseはAndroidで手軽にデータベースを扱うために使われています。

手軽に扱えて便利なクラスですが、アプリのバージョンが変わった時にテーブルに新しい列を追加したりなどしてテーブルの構成が変わることがあるかもしれません。

その場合はSQLiteOpenHelperクラスのonUpgradeメソッドをオーバーライドするとバージョンが変わった時にだけテーブルを再構成することができます。

注意として、ここでいうバージョンはアプリのバージョンのことでなくて、データベースのバージョンのことです。

アプリのversionCodeを変えてもonUpgradeは呼び出されません。

アップグレードの例

例えばテーブルのバージョンが1のテーブルを次のように作りました。

public class DBHelper extends SQLiteOpenHelper 
{
    private final int DB_VERSION = 1;
        ///テーブルのバージョン
        
    DBHelper(Context context, String name, CursorFactory factory, int version) 
    {
        super(context, name, factory, DB_VERSION);
    }
    
    /**テーブルの初期化*/
    @Override
    public void onCreate(SQLiteDatabase db) 
    {
        try{
            db.execSQL(
                "create table my_table (" +
                    "id integer primary key autoincrement not null, " +
                    "name text" +
                ");"
            );
        }catch(SQLiteException err){
            err.printStackTrace();
        }
    }
    
    /**データベースのアップグレード時の処理*/
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){}
}

ここでテーブルのバージョンは1になっていて、テーブルはidとnameという2つの列だけを持っています。

もしアプリのアップデートなどでテーブルに新しく列を追加しなくてはならなくなったらテーブルのバージョン名を2にして、onUpgradeでテーブルを再構成します。

public class DBHelper extends SQLiteOpenHelper 
{
    private final int DB_VERSION = 2;
        ///テーブルのバージョン(2に変更)
        
    DBHelper(Context context, String name, CursorFactory factory, int version) 
    {
        super(context, name, factory, DB_VERSION);
    }
    
    /**テーブルの初期化*/
    @Override
    public void onCreate(SQLiteDatabase db) 
    {
        try{
            db.execSQL(
                "create table my_table (" +
                    "id integer primary key autoincrement not null, " +
                    "name text," +
                    "age text" + 
                ");"
            );
        }catch(SQLiteException err){
            err.printStackTrace();
        }
    }
    
    /**データベースのアップグレード時の処理*/
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    {
        if(oldVersion == 1 && newVersion == 2){
            try{
                db.execSQL(
                    "create table my_table (" +
                        "id integer primary key autoincrement not null, " +
                        "name text," +
                        "age text" + 
                    ");"
                );
            }catch(SQLiteException err){
                err.printStackTrace();
            }
        }
    }
}

この場合、既に古いバージョン(1)のデーターベースが存在しているときだけonUpgradeが実行されます。

これなら、アプリのアップグレード時に確実にデータベースを更新できます。

以上、データベースのアップグレードのやり方でした。では、また!

関連項目
プライバシーポリシー