개요
Android ROOM 을 사용해서 개발할때 앱이 처음 실행될 때 테이블에 자료를 입력해야 할 경우가 있습니다. 기본 설정이나 코드값 같은 형태인데 자료 존재여부를 판단해서 입력할 수도 있습니다. 하지만 DB가 생성될 때 초기 자료를 테이블에 입력하는 것이 필요하지 않는 확인 작업을 줄일 수 있어서 더 효율적입니다.
콜백 함수 등록 및 호출
기본 자료입력은 콜백 함수를 정의하고 호출하는 형태로 구현됩니다. 아래와 같은 형태가 됩니다.
fun getInstance(context: Context): yourDB? {
if (INSTANCE == null) {
synchronized(yourDB::class) {
INSTANCE = Room.databaseBuilder(
context.applicationContext,
yourdbDB::class.java, "yourdb.db"
)
.fallbackToDestructiveMigration()
.addCallback(dbCallback)
.build()
}
}
return INSTANCE
}
var dbCallback: Callback = object : Callback() {
override fun onCreate(db: SupportSQLiteDatabase) {
Executors.newSingleThreadScheduledExecutor()
.execute(Runnable {
db.execSQL("insert into yourtable (your_field) values (your_value)
})
}
}
16-23 행과 같이 콜백 함수를 등록합니다. 생성될 때 execSQL 메소드를 이용해서 필요한 자료를 테이블에 입력하면 됩니다. 그 다음 6행과 같이 addCallback 메소드로 콜백을 추가해서 실행되도록 합니다. 이렇게 하면 처음 DB가 생성될 때 테이블에 자료를 입력할 수 있습니다.