<< Android-Note
データーベースをアップグレードするには
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が実行されます。
これなら、アプリのアップグレード時に確実にデータベースを更新できます。
以上、データベースのアップグレードのやり方でした。では、また!
© Kaz