Android 中的升級資料庫最佳方法實踐

Joerrot發表於2018-09-02
package com.activitytest.databasetest;

        import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class MyDatabaseHelper extends SQLiteOpenHelper {
    //把建立資料庫表語句等同於字串變數的值,宣告為static使得其隨著類的載入而存在,隨著類的消失而消失,
    //在類第一次被使用時裝載 ,只分配一塊儲存空間,所有此類的物件都可以操控此塊不變的儲存空間
    public final static String CREATE_BOOK = "create table Book("+
            "id integer primary key autoincrement,"+
            "author text,"+
            "price real,"+
            "pages integer,"+
            "name text" +
            "category_id integer)";
    public final static String CREATE_CATEGORY = "create table Category("
            +"id integer primary key autoincrement,"
            +"category_name text,"
            +"category_code integer)";
    private Context context;
    //第二個引數為資料庫名字(.db),第三個引數一般傳入null,第四個引數是當前資料庫的版本號
    public MyDatabaseHelper(Context mcontext, String name, SQLiteDatabase.CursorFactory cursorFactory, int version){
        super(mcontext,name,cursorFactory,version);
        context = mcontext;
    }
    //當呼叫SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法獲取用於運算元據庫的SQLiteDatabase例項的時候,
    // 如果資料庫不存在,Android系統會自動生成一個資料庫,接著呼叫onCreate()方法,onCreate()方法在初次生成資料庫時才會被呼叫,
    // 在onCreate()方法裡可以生成資料庫表結構及新增一些應用使用到的初始化資料。
    @Override
    public void onCreate(SQLiteDatabase db) {
        //如果是第一次安裝(或者刪除之後安裝)
        db.execSQL(CREATE_BOOK);
        db.execSQL(CREATE_CATEGORY);
    }
    //onUpgrade()方法在資料庫的版本發生變化時會被呼叫,一般在軟體升級時才需改變版本號.
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        switch(oldVersion){
            case 1://如果是1-->3,就會執行以下兩個case語句,這就是不加break的好處
                db.execSQL(CREATE_CATEGORY);
            case 2: //如果是2-->3
                db.execSQL("alter table Book add column category_id integer");
            default:
        }
    }
}

 

相關文章