当我们有4个数据库版本并且在每个版本的用户表中添加了一个新字段时,如何正确执行SQLiteOpenHelper的onUpgrade方法?
变体A://在每种情况下都没有“中断”,它是否在情况2和3中继续运行?
public void onUpgrade(SQLiteDatabase database, int version_old, int current_version) {
switch (version_old) {
case 1:
database.execSQL(addPostcodeFieldToUserTable);
case 2:
database.execSQL(addGenderFieldToUserTable);
case 3:
database.execSQL(addEmailSubscriptionFieldToUserTable);
break;
}
}
变体B:
public void onUpgrade(SQLiteDatabase database, int version_old, int current_version) {
switch (version_old) {
case 1:
database.execSQL(addPostcodeFieldToUserTable);
break;
case 2:
database.execSQL(addPostcodeFieldToUserTable);
database.execSQL(addGenderFieldToUserTable);
break;
case 3:
database.execSQL(addPostcodeFieldToUserTable);
database.execSQL(addGenderFieldToUserTable);
database.execSQL(addEmailSubscriptionFieldToUserTable);
break;
}
但是,如果用户拥有数据库的版本1,然后错过了版本2,并使用版本3升级了应用程序,我们该怎么办?
变体3:
public void onUpgrade(SQLiteDatabase database, int version_old, int current_version) {
if(version_old==1 && current_version==2) {
database.execSQL(addPostcodeFieldToUserTable);
} else if(version_old==2 && current_version==3) {
database.execSQL(addGenderFieldToUserTable);
} else if(version_old==3 && current_version==4) {
database.execSQL(addEmailSubscriptionFieldToUserTable);
} else if(version_old==1 && current_version==3) {
database.execSQL(addPostcodeFieldToUserTable);
database.execSQL(addGenderFieldToUserTable);
} else if(version_old==1 && current_version==4) {
database.execSQL(addPostcodeFieldToUserTable);
database.execSQL(addGenderFieldToUserTable);
database.execSQL(addEmailSubscriptionFieldToUserTable);
} else if(version_old==2 && current_version==4) {
database.execSQL(addGenderFieldToUserTable);
database.execSQL(addEmailSubscriptionFieldToUserTable);
}
}