Androidデータベースのアップグレード、ダウングレード、作成(onCreate()onUpgrade()onDowngrade()

3796 ワード

参照先:https://blog.csdn.net/meryvn/article/details/48786495
プロジェクトでは、データベース・テーブルのフィールドを変更したり、データベース・テーブルを作成したりすることがあります.この場合、データベースのアップグレード、ダウングレードのメソッド呼び出しに注目し、関連処理を行う必要があります.そうしないと、バージョンが一致しないと、データベースが使用できなくなり、アプリケーションにANRなどの異常が発生します.
DBHelperクラス
public class DBHelper  extends SQLiteOpenHelper{
static finanl int DATABASE_VERSION_5 = 5;
static finanl String DATABASE_NAME = "zxts.sms.db";

private DBHelper(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION_5);
}

@Override
public void onCreate(SQLiteDatabase db){
//create table
  /**      
*     
 * 1、               
 * 2、           -->     ,      
 * 3、      ,       
* 4、               
  */
}


@Override
public void onUpdate(SQLiteDatabase db, int oldVersion, int newVersion){
//      
  /**      
*     
 * 1、               
 * 2、           ,       
* 3、       ,         ,        
  */
}

@Override
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion){
//      ,      
  /**      
*     
 * 1、                 
 * 2、         ,     
  */
super.onDowngrade(db, oldVersion, newVersion);
}

}

SQLiteOpenHelperこれは、データベースの作成とデータベースのバージョンを管理するための補助クラスです.
このクラスのサブクラスを作成してonCreate(SQLiteDatabase)、onUpgrade(SQLiteDatabase,int,int)メソッド、オプションのonOpen(SQLiteDatabase)メソッドを実装します.このクラスはデータベースのステータスを管理し、データベースが存在する場合はデータベースを開きます.そうしないとデータベースが作成され、必要に応じてデータベースが更新されます.トランザクションを使用して、データベースが常に正しい状態にあることを確認します.
このクラスはContentProviderの実装を容易にし、データベースのオープンとアップグレードを最初の使用に遅延させ、アップグレードデータベースの長時間の実行によるアプリケーションのブロックを回避します.
Publicコンストラクタ
public SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CuresorFactory factory, int version)

データベースの作成、オープン、管理に使用するヘルパーオブジェクトを作成します.この方法は常に迅速に返される.getWriteableDatabase()メソッドまたはgetReadableDatabase()メソッドが呼び出されるまで、このデータベースは実際に作成されません.
パラメータの説明:
context:データベースを開くか作成します.
name:データベースのファイル名を指定し、nullはメモリ内のデータベースを指定します.
factory:カーソルオブジェクト、またはデフォルトのnullを作成します.
バージョン:データベースのバージョン番号を指定します(1から).データベースが古い場合は、onUpgrade(SQLiteDatabase,int,int)メソッドを使用してデータベースをアップグレードします.データベースが比較的新しい場合は、onDownggrade(SQLiteDatabase,int,int)メソッドを使用してデータベースをダウングレードします.
public abstract void onCreate(SQLiteDatabase db)

データベースが最初に作成されると、このメソッドが呼び出されます.データベース・テーブルとテーブルの初期化場所が作成されます.
パラメータ:
db:作成するデータベース.
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion)

このメソッドは、データベースがダウングレードされる必要がある場合に呼び出されます.このメソッドはonUpgrade(SQLiteDatabase,int,int)メソッドとよく似ていますが、現在のバージョンが要求されたバージョンよりも新しい場合に呼び出されます.しかし、この方法は抽象的ではないので、お客様に強制的に実現させるわけではありません.この方法が書き換えられていない場合、デフォルトのインプリメンテーションは降格処理を拒否し、SQLiteException例外を放出します.
この方法はトランザクションで実行されます.異常が投げ出されると、すべての変更がロールバックされます.
パラメータ:
db:降格するデータベースを指定する
oldVersion:古いデータベースバージョン
新バージョン
public abstract void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)

このメソッドは、データベースのアップグレードが必要な場合に呼び出されます.この方法を使用して、テーブルの削除、テーブルの追加、または新しいポリシーバージョンのアップグレードが必要なことを行う必要があります.
テーブルに新しいカラムを追加する場合は、ALTER TABLEを使用してテーブルに新しいカラムを挿入します.カラムの名前を変更または削除する場合は、ALTER TABLEを使用して古いテーブルの名前を変更し、新しいテーブルを作成し、古いテーブルの内容を新しいテーブルにコピーできます.
@Override
 public abstract void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
  if(oldVersion < 3){
     db.execSQL("CREATE TABLE IF NOT EXISTS addrbook (id interger default 0, name text default '', number text default '');")
     oldVersion = 3;
   }
   if(oldVersion < 5){
   db.execSQL("ALTER TABLE gotasettings ADD COLUMN mds_server_ip TEXT DEFAULT '';" );
   oldVersion = 5;
  }
 }

この方法はトランザクションで実行され、例外が投げ出されると、すべての変更が自動的にロールバックされます.
パラメータ:
db:降格するデータベースを指定する
oldVersion:古いデータベースバージョン
新バージョン