Jaskey'in isteğine göre, eksik noktaları daha fazla eklemek için
Veritabanı sürümü, SQLiteveritabanı dosyasında saklanır .
catch yapıcı
SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
Dolayısıyla, veritabanı yardımcı kurucusu bir name(2. param) ile çağrıldığında , platform veritabanının var olup olmadığını kontrol eder ve veritabanı varsa, sürüm bilgilerini veritabanı dosya başlığından alır ve doğru geri çağrıyı tetikler
Eski yanıtta daha önce açıklandığı gibi, adı olan veritabanı yoksa, tetiklenir onCreate.
Aşağıdaki açıklama onUpgradeörneği bir örnekle açıklamaktadır .
Diyelim ki, uygulamanızın ilk sürümünde yapıcı geçiş sürümü olarak DatabaseHelper(genişletme SQLiteOpenHelper) vardı 1ve daha sonra yeni kaynak kodunun sürümü geçmiş olarak yükseltilmiş bir uygulama sağladınız 2, daha sonra DatabaseHelperoluşturulduğunda platform onUpgradezaten dosyayı görerek otomatik olarak tetikleniyor , ancak sürüm, geçtiğiniz geçerli sürümden daha düşük.
Şimdi db sürümü ile uygulamanın üçüncü bir sürümünü vermeyi planladığınızı varsayalım 3(db sürümü yalnızca veritabanı şeması değiştirilecekse artar). Bu tür artımlı yükseltmelerde, daha iyi korunabilir bir kod için yükseltme mantığını her sürümden kademeli olarak yazmanız gerekir.
Aşağıdaki örnek sahte kod:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch(oldVersion) {
case 1:
//upgrade logic from version 1 to 2
case 2:
//upgrade logic from version 2 to 3
case 3:
//upgrade logic from version 3 to 4
break;
default:
throw new IllegalStateException(
"onUpgrade() with unknown oldVersion " + oldVersion);
}
}
Durumunda eksik breakifadeye dikkat edin 1ve 2. Kademeli yükseltme ile kastediyorum.
Eski versiyon ise Say 2ve yeni versiyonudur 4, daha sonra mantık gelen veritabanı yükseltir 2için 3ve daha sonra4
Eski sürüm ise 3ve yeni sürüm ise 4, yalnızca yükseltme mantığını çalıştıracaktır 3.4