Assalamu’alaikum dan salam sejahtera sahabat. Kali ini penulis membahas mengenai pre-populated database di room. Pada saat kita membangun sebuah aplikasi yang menggunakan database, terkadang ada kasus dimana kita ingin menyiapkan data dari awal. Nah, solusinya kita bisa menyiapkan tabel database tersebut sejak aplikasi pertama kali di-install. cara ini disebut dengan pre-populated database dimana ada beberapa cara untuk menyiapkan data tersebut, yakni dengan meng-import database dari asset file, atau dengan cara yang lebih fleksibel yakni dengan memanggil fungsi addCallback. Mari kita simak caranya satu per satu.
Melalui Asset
Untuk mengimpor database yang diletakan di folder asset project terbilang sangat mudah. Cukup panggil fungsi createFromAsset() sebelum fungsi build() dari RoomDatabase.Builder. Berikut ini merupakan contohnya :
Room.databaseBuilder(applicationContext, ExpenseDatabase::class.java, "expense_database")
.createFromAsset("initial_expense.db")
.build()
bisa dilihat di method createFromAsset di atas, kita dapat memberikan sebuah argumen tambahan berupa path dan nama file database. Cukup dengan satu method ini, aplikasi akan otomatis meng-import data di awal sesuai dengan file database yang telah disiapkan. Dan pastikan juga bahwa database yang telah dipersiapkan sesuai dengan skema database pada aplikasi kita.
Melalui File Directory
Selain dari folder Asset, kita juga dapat meng-import file database dari folder lain. Hal ini biasanya digunakan jika file database diperoleh dari hasil download atau cara lainnya. Untuk melakukannya, cukup panggil fungsi createFromAssetFile() sebelum fungsi build() dari RoomDatabase.Builder. Berikut contoh kodenya :
Room.databaseBuilder(applicationContext, ExpenseDatabase::class.java, "expense_database")
.createFromFile(new File("database/initial_expense.db"))
.build()
Ketika kita menggunakan method ini, Room tidak akan langsung membuka file tersebut, melainkan membuat dulu salinannya terlebih dahulu. Jadi, pastikan aplikasi memiliki permission READ_EXTERNAL_STORAGE untuk menyalin file.
catatan :
Perlu diketahui bahwa kedua fungsi di atas (createFromAsset dan createFromFile) tidak tersedia pada In-Memory Room Database yang biasa digunakan untuk testing.Melalui Fungsi AddCallback
Selain kedua cara diatas, kita juga dapat menggunakan fungsi addCallback ketika membuat instance Room Database. Kurang lebih caranya seperti berikut :
Room.databaseBuilder(context.applicationContext, StudentDatabase::class.java, "student_database")
.addCallback(object :Callback(){
override fun onCreate(db: SupportSQLiteDatabase) {
super.onCreate(db)
//insert new data
}
})
.build()
Fungsi onCreate akan otomatis terpanggil tepat ketika tabel database dipanggil pertama kali dibuat. Kita juga bisa menggunakan dao untuk memasukan data baru pada fungsi ini. Adapun hal yang harus diperhatikan adalah kita perlu membuat background thread untuk bisa memasukan data baru. Selain onCreate, ada juga fungsi onOpen ketika aplikasi dibuka, akan tetapi penulis tidak membahasnya dikarenakan tidak ada hubungannya dengan pre-populated database. Sekian dulu tulisan dari penulis kurang lebihnya mohon maaf. Wassalamu’alaikum dan terima kasih sahabat.