SQLite
 sql >> Teknologi Basis Data >  >> RDS >> SQLite

Kapan SQLiteOpenHelper onCreate() / onUpgrade() dijalankan?

SQLiteOpenHelper onCreate() dan onUpgrade() callback dipanggil saat database benar-benar dibuka, misalnya dengan panggilan ke getWritableDatabase() . Basis data tidak dibuka saat objek pembantu basis data itu sendiri dibuat.

SQLiteOpenHelper versi file database. Nomor versi adalah int argumen diteruskan ke konstruktor. Dalam file database, nomor versi disimpan di PRAGMA user_version .

onCreate() hanya dijalankan ketika file database tidak ada dan baru saja dibuat. Jika onCreate() berhasil kembali (tidak mengeluarkan pengecualian), database diasumsikan dibuat dengan nomor versi yang diminta. Sebagai implikasinya, Anda tidak boleh menangkap SQLException s di onCreate() sendiri.

onUpgrade() hanya dipanggil ketika file database ada tetapi nomor versi yang disimpan lebih rendah dari yang diminta di konstruktor. onUpgrade() harus memperbarui skema tabel ke versi yang diminta.

Saat mengubah skema tabel dalam kode (onCreate() ), Anda harus memastikan database diperbarui. Dua pendekatan utama:

  1. Hapus file database lama sehingga onCreate() dijalankan lagi. Ini sering lebih disukai pada waktu pengembangan di mana Anda memiliki kendali atas versi yang diinstal dan kehilangan data tidak menjadi masalah. Beberapa cara untuk menghapus file database:

    • Copot pemasangan aplikasi. Gunakan pengelola aplikasi atau adb uninstall your.package.name dari cangkangnya.

    • Hapus data aplikasi. Gunakan pengelola aplikasi.

  2. Tingkatkan versi database sehingga onUpgrade() dipanggil. Ini sedikit lebih rumit karena diperlukan lebih banyak kode.

    • Untuk peningkatan skema waktu pengembangan di mana kehilangan data tidak menjadi masalah, Anda cukup menggunakan execSQL("DROP TABLE IF EXISTS <tablename>") in untuk menghapus tabel yang ada dan memanggil onCreate() untuk membuat ulang basis data.

    • Untuk versi yang dirilis, Anda harus mengimplementasikan migrasi data di onUpgrade() agar pengguna Anda tidak kehilangan datanya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Basis data pengaksesan Robolectric menimbulkan kesalahan

  2. Bagaimana cara menggabungkan data dari dua tabel terpisah menjadi satu Kursor?

  3. SQLite JSON_INSERT()

  4. Masukkan Beberapa Baris dalam Kesalahan SQLite (kode kesalahan =1)

  5. Gabung SQLite