1. 程式人生 > >Android 數據庫升級

Android 數據庫升級

單例模式 ide 它的 單例 class efault _id rim log

數據庫升級:v1.0-v2.1
從v1.0升級到v2.01,不走oncreate,走onupdategrade
直接安裝v2.0,走onCreate;

v1.0-v3.0:分三種情況
1.v1.0升級到v3.0: 不走onCreate,走onUpgrade
2.v2.0升級到v3.0:不走onCreate,走onUpgrade
3.直接安裝v3.0:走onCreate,不走onUpgrade
public
class DbHelper extends SQLiteOpenHelper { // private static final int DATABASE_VERSION = 1000; private static final
int DATABASE_VERSION = 1001; //private static final int DATABASE_VERSION = 1002; private static final String DATABASE_NAME = "mall.db"; private static DbHelper instance = null; /*操作數據庫有兩個非常重要的類:SQLiteDatabase和SQLiteOpenHelper * 1.SQLiteDatabase的實例便代表了SQLite數據庫,通過SQLiteDatabase的一些常用方法,可以執行SQL語句, * 對數據庫進行添加、刪除、更新、查找和修改等操作
     * 2.SQLiteOpenHelper是一個輔助類,主要負責創建和打開數據庫以及對數據庫的版本進行管理。
     * SQLiteOpenHelper是一個抽象類,需要繼承它並實現它的幾個回調函數
     * */
   /*
    1.寫內部類 繼承SQLiteOpenHelper
    2.生成實現方法
      (1)創建  public void onCreate(SQLiteDatabase db) {
      (2)升級  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    3.生成器 調用父類的構造方法
     public DBHelper(String name, int version) {

    4.點擊事件 調用構造方法DBHelper 創建 連接數據庫
*/ //內部類繼承 需要自己生成構造器 public DbHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } //創建對象(單例模式) public synchronized DbHelper getInstance(Context context) { if (instance == null) { instance = new DbHelper(context); } return instance; } //建表 @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { sqLiteDatabase.execSQL(SQL.CREATE_TABLE_fAVORATE); // 若不是第一個版本安裝,直接執行數據庫升級 // 請不要修改FIRST_DATABASE_VERSION的值,其為第一個數據庫版本大小 final int FIRST_DATABASE_VERSION = 1000; onUpgrade(sqLiteDatabase, FIRST_DATABASE_VERSION, DATABASE_VERSION); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) { // 使用for實現跨版本升級數據庫 for (int i = oldVersion; i < newVersion; i++) { switch (i) { case 1000: //從v1.0升級到v1.1 upgradeToVersion1001(sqLiteDatabase); break; case 1001: //從v1.1升級到v1.2 upgradeToVersion1002(sqLiteDatabase); break; default: break; } } } private void upgradeToVersion1001(SQLiteDatabase db) { // favorite表新增1個字段 String sql1 = "ALTER TABLE " + SQL.T_FAVORITE + " ADD COLUMN deleted VARCHAR"; db.execSQL(sql1); } private void upgradeToVersion1002(SQLiteDatabase db) { // favorite表新增2個字段,添加新字段只能一個字段一個字段加,sqlite有限制不予許一條語句加多個字段 String sql1 = "ALTER TABLE " + SQL.T_FAVORITE + " ADD COLUMN message VARCHAR"; String sql2 = "ALTER TABLE " + SQL.T_FAVORITE + " ADD COLUMN type VARCHAR"; db.execSQL(sql1); db.execSQL(sql2); } }

//創建數據庫(建表)
public class SQL {
    public static final String T_FAVORITE = "favorite";
    public static final String CREATE_TABLE_fAVORATE="create table T_FAVORITE if not exists" +
            "(_id integer primary key autoincrement," +
            "title varchar,url varchar," +
            "creataDate varchar)";
}

 

Android 數據庫升級