Android 數據庫升級
阿新 • • 發佈:2017-08-16
單例模式 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 數據庫升級