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

Android ROOM 초기 자료 입력하기”에 대한 2개의 생각

  1. YB

    execSQl을 통해서 필요한 자료(데이터)를 테이블에 입력하면 된다고 하셨는데요, 그런데 데이터의 양이 많을 경우에는 어떻게하나요?

    응답
    1. Toughman 글쓴이

      안녕하세요?
      양이 많다는 것이 상대적일 수 있는데 제가 판단하기에는 두가지 정도 방법이 있을 것 같습니다.
      첫번째는 자료를 미리 SQLite DB에 개발자가 입력해서 배포하는 방법입니다. Database Inspector 에서 필요한 만큼 자료를 입력하는 방법입니다.
      두번째는 텍스트 파일(CSV 파일)을 읽어들여서 입력하는 방법입니다.

      bulk insert into SQLITE 이런 검색어로 검색해 보시면 더 많은 자료를 보실 수 있을 것 같습니다.

      응답

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Time limit is exhausted. Please reload the CAPTCHA.