Android 中的升級資料庫最佳方法實踐
阿新 • • 發佈:2018-12-26
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: } } }