最後に、データベースのバージョンアップ処理について簡単に紹介しておこう。
アプリケーションのバージョンアップと同時に、データベース上のテーブル定義も更新したいケースがあるだろう。そういった場合には、SQLiteOpenHelperのonUpgrade()メソッドを実装することで対応できる。
前回のTipsのサンプルコードで作成した“name_book_table”というテーブルを例に説明しよう。“name_book_table”は名前(name)と年齢(age)の情報を管理するテーブルだが、アプリケーションのバージョンアップに併せ、追加で「性別(gender)」も管理できるようにしたい。そういった場合、SQLiteOpenHelperの実装を以下のように更新する。
実装例は、以下のようになる。前回のサンプルコードと見比べてほしい。
import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class NameBookDBHelper extends SQLiteOpenHelper { // コンストラクタ public NameBookDBHelper( Context context ){ // 任意のデータベースファイル名と、バージョンを指定する super( context, "sample.db", null, 2 ); } /** * このデータベースを初めて使用する時に実行される処理 * テーブルの作成や初期データの投入を行う */ @Override public void onCreate( SQLiteDatabase db ) { // テーブルを作成。SQLの文法は通常のSQLiteと同様 db.execSQL( "create table name_book_table (" + "_id integer primary key autoincrement not null, " + "name text not null, " + "age integer," + "gender text not null )" ); // 必要なら、ここで他のテーブルを作成したり、初期データを挿入したりする } /** * アプリケーションの更新などによって、データベースのバージョンが上がった場合に実行される処理 */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 古いテーブルを削除して、新しいテーブルを作り直す db.execSQL( "drop table name_book_table" ); onCreate( db ); } }
前回のTipsで紹介したものと比べると、以下の点が違っている。
ここでのonUpgrade()は、単に古いテーブルを削除して新しいテーブルを作るだけの最低限の実装しかしていない。そのため、これだけだと古いテーブルに入っていたデータが全て消えてしまう。もしも、古いテーブルのデータを新しいテーブルに引き継ぎたい場合は、そういった処理もonUpgrade()の中に実装する必要がある。
≫連載「Androidアプリケーション開発者のためのTips集」の目次
Copyright © ITmedia, Inc. All Rights Reserved.