Каким образом можно выполнить метод onUpgrade SQLiteOpenHelper, когда у нас есть 4 версии базы данных, и мы добавили новое поле в таблицу пользователя в каждой версии?SQLite onUpgrade с 4 версиями базы данных
Вариант 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);
}
}
Я бы сказал, что ** B **: если 'пользователь имел версию 1 из БД, затем пропустил версии 2 и модернизированных приложение с версией 3', тогда он/она получит ** все ** обновления в любом случае. Даже ненужные предыдущие (которые, я надеюсь, ** удалось изящно терпеть неудачу **, если таблицы/s уже находятся в db). –
Что делать, если бы я использовал версию метода onUpgrade для 3-х версий сейчас, будет ли она что-то нарушать для существующих пользователей при загрузке новейших версий приложения, где я использую вариант B? –
Также вы можете подробно остановиться на вещи «удалось изящно терпеть неудачу» –