Просматривая все посты и выполняя отладочный код, мне все еще не было ясно, когда я увижу, как вызывается onUpgrade. Я начинал думать, что у Android был серьезный недостаток ..
Информация на этой странице привела меня к окончательному решению. Огромное спасибо всем участникам!
Это решило это для меня ...
public class DatabaseHelper extends SQLiteOpenHelper {
public static String TAG = DatabaseHelper.class.getName();
private static final int DATABASE_VERSION = 42;
private static final String DATABASE_NAME = "app_database";
private static final String OLD_TABLE = "old_and_useless";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion ) {
if( newVersion > oldVersion) {
Log.d( TAG, "cool! you noticed." );
db.execSQL( "DROP TABLE IF EXISTS " + OLD_TABLE );
// other calls like onCreate if necessary
} else {
Log.d( TAG, "Hey! didn't you see me?" );
}
}
public void checkDatabaseVersion() {
SQLiteDatabase db = this.getWritableDatabase();
// if the DATABASE_VERSION is newer
// onUpgrade is called before this is reached
}
// other code removed for readability...
}
Это правда, что getWritableDatabase () и getReadableDatabase () приводят к вызову onUpgrade. Я не проверял другие методы, так как они соответствуют моим потребностям.
Продолжайте читать, приближается кикер ...
Этот код в моей первоначальной Деятельности просветил меня, когда я наконец понял, что версия БД обновлялась во время моей отладки ... тьфу!
DatabaseHelper dbHelper = new DatabaseHelper( this );
dbHelper.checkDatabaseVersion();
ПРИМЕЧАНИЕ: вызов конструктора DatabaseHelper обновляет версию базы данных
После вызова конструктора БД была помечена новой версией. Убейте приложение перед вызовом getWritableDatabase () или getReadableDatabase (), и вы в новой версии. После этого новые исполнения никогда не вызывают метод onUpgrade до тех пор, пока DATABASE_VERSION снова не увеличится. ( вздох! Теперь это кажется смехотворно очевидным :)
Я предлагаю добавить своего рода "checkDatabaseVersion ()" на ранних стадиях вашего приложения. Кроме того, если вы создаете объект SQLiteOpenHelper, убедитесь, что вы вызываете один из методов (getWritableDatabase (), getReadableDatabase () и т. Д.) До того, как ваше приложение умрет.
Надеюсь, это спасет кого-то еще от того же царапин на голове! ...: p