Jaskey'in isteğine göre, eksik noktaları daha fazla eklemek için
Veritabanı sürümü, SQLite
veritabanı 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ı 1
ve daha sonra yeni kaynak kodunun sürümü geçmiş olarak yükseltilmiş bir uygulama sağladınız 2
, daha sonra DatabaseHelper
oluşturulduğunda platform onUpgrade
zaten 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 break
ifadeye dikkat edin 1
ve 2
. Kademeli yükseltme ile kastediyorum.
Eski versiyon ise Say 2
ve yeni versiyonudur 4
, daha sonra mantık gelen veritabanı yükseltir 2
için 3
ve daha sonra4
Eski sürüm ise 3
ve yeni sürüm ise 4
, yalnızca yükseltme mantığını çalıştıracaktır 3
.4