連載
» 2012年09月21日 10時00分 UPDATE

Android Tips(20):知っておきたいSQLiteデータベースの注意点 (2/2)

[秋本耕平(イーフロー),@IT MONOist]
前のページへ 1|2       

データベースのバージョンアップ処理

 最後に、データベースのバージョンアップ処理について簡単に紹介しておこう。

 アプリケーションのバージョンアップと同時に、データベース上のテーブル定義も更新したいケースがあるだろう。そういった場合には、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 コーナー

Androidコーナー
「Android(アンドロイド)」の組み込み機器への適用からアプリ開発、レポート、ニュースなどさまざまな技術情報・最新動向をお届けする!!

>>コーナーTOPはこちらから


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.