標籤:_id exist 第一個 arc contex .exe oid class ima
資料庫升級: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 資料庫升級