|
在寫App時,會用到sqlite當資料庫
但app會一直更新
所以資料庫欄位也會增加
這時如何讓使用者無痛更新呢?
假設我要再現有資料庫資加一個欄位
在呼叫sqlite時最上端會用到這行
- public MyDB(Context context) {
- super(context, SQL_NAME, null, 1);
- }
複製代碼
這時找到這一函式
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- switch (oldVersion) {
- case 1:
- String ALTER_TBL =
- "ALTER TABLE " + TABLE_NAME +
- " ADD COLUMN kkk text;";
- db.execSQL(ALTER_TBL);
- break;
- }
複製代碼 這時把1改成2
- public MyDB(Context context) {
- super(context, SQL_NAME, null, 2);
- }
複製代碼
當APP運行時
就會多一欄位 kkk
如圖
如果我要刪除columns時,又該如何處理呢?
首先先把table改名
然後建新new_table
把table資料copy 到new_table
這樣就可以了
實作
建新的table
- CREATE TABLE team(Name TEXT, Coach TEXT, City TEXT)
複製代碼
等等把 city 欄位改成 Location
步驟1: 更名原始 table為team_orig:
- ALTER TABLE team RENAME TO team_orig;
複製代碼
步驟 2: 建置新的替代table有:Name , Coach , Location
- CREATE TABLE team(Name TEXT, Coach TEXT, Location TEXT);
複製代碼
步驟 3: 複製資料從舊table到新table
- INSERT INTO team(Name, Coach, Location) SELECT Name, Coach, City FROM team_orig;
複製代碼
Note: The above command should be all one line.
步驟 4: 刪除舊 table:
參考資料
https://stackoverflow.com/questi ... -database-in-my-app
https://blog.xojo.com/2013/12/04 ... s-in-sqlite-tables/
|
|