TShopping

 找回密碼
 註冊
搜索
查看: 1364|回復: 0
打印 上一主題 下一主題

[教學] SQLite在Android下增加新的columns

[複製鏈接]
跳轉到指定樓層
1#
發表於 2018-2-8 18:13:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
 
Push to Facebook
在寫App時,會用到sqlite當資料庫

但app會一直更新

所以資料庫欄位也會增加

這時如何讓使用者無痛更新呢?

假設我要再現有資料庫資加一個欄位

在呼叫sqlite時最上端會用到這行

  1. public MyDB(Context context) {
  2.         super(context, SQL_NAME, null, 1);
  3.     }
複製代碼


這時找到這一函式
  1. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  2.         switch (oldVersion) {
  3.             case 1:
  4.                 String ALTER_TBL =
  5.                                 "ALTER TABLE " + TABLE_NAME +
  6.                                 " ADD COLUMN kkk text;";
  7.                 db.execSQL(ALTER_TBL);
  8.                 break;
  9.     }
複製代碼
這時把1改成2
  1. public MyDB(Context context) {
  2. super(context, SQL_NAME, null, 2);
  3. }
複製代碼


當APP運行時
就會多一欄位 kkk

如圖


如果我要刪除columns時,又該如何處理呢?
首先先把table改名
然後建新new_table
把table資料copy 到new_table
這樣就可以了


實作
建新的table
  1. CREATE TABLE team(Name TEXT, Coach TEXT, City TEXT)
複製代碼

等等把 city 欄位改成  Location

步驟1: 更名原始 table為team_orig:

  1. ALTER TABLE team RENAME TO team_orig;
複製代碼



步驟 2: 建置新的替代table有:Name , Coach , Location

  1. CREATE TABLE team(Name TEXT, Coach TEXT, Location TEXT);
複製代碼

步驟 3: 複製資料從舊table到新table

  1. INSERT INTO team(Name, Coach, Location) SELECT Name, Coach, City FROM team_orig;
複製代碼

Note: The above command should be all one line.

步驟 4: 刪除舊 table:

  1. DROP TABLE team_orig;
複製代碼



參考資料
https://stackoverflow.com/questi ... -database-in-my-app
https://blog.xojo.com/2013/12/04 ... s-in-sqlite-tables/

 

臉書網友討論
*滑块验证:
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2024-4-28 00:42 , Processed in 0.058934 second(s), 25 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表