知っておきたいSQLiteデータベースの注意点:Androidアプリケーション開発者のためのTips集(20)(2/2 ページ)
Androidアプリ開発者のためのTips集。「SQLite」を使用する上で気を付けなくてはならない幾つかのポイントを解説する。加えて、前回のTipsで紹介し切れなかったデータベースのバージョンアップ処理についても紹介する。
データベースのバージョンアップ処理
最後に、データベースのバージョンアップ処理について簡単に紹介しておこう。
アプリケーションのバージョンアップと同時に、データベース上のテーブル定義も更新したいケースがあるだろう。そういった場合には、SQLiteOpenHelperのonUpgrade()メソッドを実装することで対応できる。
前回のTipsのサンプルコードで作成した“name_book_table”というテーブルを例に説明しよう。“name_book_table”は名前(name)と年齢(age)の情報を管理するテーブルだが、アプリケーションのバージョンアップに併せ、追加で「性別(gender)」も管理できるようにしたい。そういった場合、SQLiteOpenHelperの実装を以下のように更新する。
- コンストラクタに渡すバージョン番号を更新する
- onUpgrade()メソッドに、テーブルの作り直し処理を記述する
実装例は、以下のようになる。前回のサンプルコードと見比べてほしい。
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で紹介したものと比べると、以下の点が違っている。
- コンストラクタで指定しているバージョン番号が「1」から「2」になっている
- onUpgrade()メソッドの実装が追加されている
ここでのonUpgrade()は、単に古いテーブルを削除して新しいテーブルを作るだけの最低限の実装しかしていない。そのため、これだけだと古いテーブルに入っていたデータが全て消えてしまう。もしも、古いテーブルのデータを新しいテーブルに引き継ぎたい場合は、そういった処理もonUpgrade()の中に実装する必要がある。
≫連載「Androidアプリケーション開発者のためのTips集」の目次
Copyright © ITmedia, Inc. All Rights Reserved.