Untuk lebih lanjut menambahkan poin yang hilang di sini, sesuai permintaan Jaskey
Versi database disimpan dalam SQLite
file database.
menangkap adalah konstruktor
SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
Jadi ketika konstruktor pembantu database dipanggil dengan name
(param 2), platform memeriksa apakah database ada atau tidak dan jika database ada, ia mendapatkan informasi versi dari header file database dan memicu panggilan balik yang tepat
Seperti yang sudah dijelaskan dalam jawaban yang lebih lama, jika database dengan nama tidak ada, itu dipicu onCreate
.
Penjelasan di bawah ini menjelaskan onUpgrade
kasus dengan contoh.
Katakanlah, versi aplikasi pertama Anda memiliki versi DatabaseHelper
(extending SQLiteOpenHelper
) dengan konstruktor yang lewat sebagai 1
dan kemudian Anda memberikan aplikasi yang ditingkatkan dengan kode sumber baru setelah versi berlalu 2
, kemudian secara otomatis ketika DatabaseHelper
dibangun, platform memicu onUpgrade
dengan melihat file yang sudah ada, tetapi versi ini lebih rendah dari versi saat ini yang telah Anda lewati.
Sekarang katakan Anda berencana untuk memberikan versi ketiga aplikasi dengan versi db sebagai 3
(versi db hanya meningkat ketika skema database akan dimodifikasi). Dalam peningkatan bertahap seperti itu, Anda harus menulis logika pemutakhiran dari setiap versi secara bertahap untuk mendapatkan kode yang dapat dikelola dengan lebih baik
Contoh kode semu di bawah ini:
@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);
}
}
Perhatikan break
pernyataan yang hilang dalam kasus 1
dan 2
. Inilah yang saya maksud dengan peningkatan bertahap.
Katakan jika versi yang lama 2
dan versi yang baru 4
, maka logikanya akan memutakhirkan basis data dari 2
ke 3
dan kemudian ke4
Jika versi lama adalah 3
dan versi baru ini 4
, itu hanya akan menjalankan logika upgrade untuk 3
ke4