반응형
AAC의 Room을 사용하면서 데이터베이스를 생성하면서 초기에 데이터를 세팅해야하는 일이 발생하곤 합니다.
오늘은 Room을 사용하면 데이터베이스에 데이터를 미리 채우는 방법에 대해 알아보도록 하겠습니다.
아래의 Developer 사이트를 참고하면 createFromAsset 또는 createFromFile과 같은 메소드를 통해 데이터베이스를 생성할 수 있지만 저의 경우에는 제대로 동작하지 않았습니다. (참고사항에 있는 메모리 내 데이터베이스이기 때문인 것으로 보입니다)
developer.android.com/training/data-storage/room/prepopulate?hl=ko
때문에 저는 데이터베이스를 생성하고 난 뒤의 콜백리스너를 통해 미리 데이터 값을 세팅할 수 있었습니다.
Room 데이터베이스 생성자를 다음과 같이 변경합니다.
@Module
class DatabaseModule {
@Provides
fun provideDatabase(context: Context):AppDatabase{
return Room.databaseBuilder(context, AppDatabase::class.java, "event.db")
.addCallback(object: RoomDatabase.Callback(){
override fun onCreate(db: SupportSQLiteDatabase) {
super.onCreate(db)
db.execSQL("insert into category (name, color) values ('수면', '#123456');")
db.execSQL("insert into category (name, color) values ('공부', '#456789');")
db.execSQL("insert into category (name, color) values ('운동', '#A98765');")
}
})
.build()
}
}
생성자만을 중점적으로 살펴보면 addCallback 메소드를 통해 콜백을 등록하고, 쿼리문을 실행하는 것을 확인할 수 있습니다. 예제에 나온 onCreate(db생성시) 이외에도 onOpen(데이터베이스 열람 시), onDestructiveMigration(버전 마이그레이션 시) 함수도 존재하기 때문에 필요에 맞춰 사용하시면 될 것으로 보입니다 !!
이와같이 Room생성자에서 콜백리스너를 등록하여 데이터베이스의 데이터를 미리 채울 수 있습니다.
'IT 프로그래밍-Android' 카테고리의 다른 글
다음(카카오) 주소 검색(우편번호 검색) api 오류 해결 (0) | 2021.05.18 |
---|---|
BottomSheetDialog MVVM(ViewModel, Databinding) 적용방법 (0) | 2020.09.23 |
[MVVM 적용기] LiveData와 Databinding (0) | 2020.09.09 |
Retrofit + spring 사용 시 JsonObject 파싱 에러 (1) | 2020.06.18 |
[데이터바인딩] Room 데이터베이스 적용하기 (1) | 2020.05.14 |