태그 보관물: ROOM

Android ROOM 초기 자료 입력하기

개요

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가 생성될 때 테이블에 자료를 입력할 수 있습니다.