最後に、データベースのバージョンアップ処理について簡単に紹介しておこう。
アプリケーションのバージョンアップと同時に、データベース上のテーブル定義も更新したいケースがあるだろう。そういった場合には、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.
組み込み開発の記事ランキング
コーナーリンク