Android 以 DATABASE_VERSION 整數控制資料庫版本。當版本號增大時,框架自動呼叫 onUpgrade(),開發者在其中執行 DDL 遷移腳本。
SQLiteOpenHelper 子類別中定義 DATABASE_VERSION 常數。onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion),根據版本差異執行對應 SQL。public class DBHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 2; // 升級為 2
private static final String DATABASE_NAME = "EmployeeDB";
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE contacts (id INTEGER PRIMARY KEY, name TEXT, phone TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < 2) {
// v1 → v2:新增 email 欄位
db.execSQL("ALTER TABLE contacts ADD COLUMN email TEXT DEFAULT ''");
}
if (oldVersion < 3) {
// v2 → v3:建立索引
db.execSQL("CREATE INDEX idx_contacts_name ON contacts(name)");
}
// 依此類推...
}
}
onUpgrade 運行在交易中,任一 SQL 失敗會整體回滾。onUpgrade 執行耗時操作(如大量資料轉換),建議啟動 IntentService 或 WorkManager 背景處理。onUpgrade 呼叫 context.deleteDatabase(name) 後再 onCreate(db),但會丟失所有資料。SQLiteOpenHelper 偵測版本號變大,呼叫 onUpgrade。