본문 바로가기
Kotlin

[깡샘의 코틀린 프로그래밍] 정리 23 - SQLiteOpenHelper

by 들풀민들레 2018. 3. 2.

본 글은 [깡샘의 코틀린 프로그래밍 - 루비페이퍼] 의 내용을 발췌한 것입니다.

좀더 자세한 내용은 책을 통해 확인해 주세요.

 

 

 

23장. DBMS와 RecyclerView

 

23.1.2. SQLiteOpenHelper 클래스

 

간단하게 SQLiteDatabase와 Cursor 클래스만 사용해도 모든 SQL 문을 수행할 수 있지만, SQLiteOpenHelper 클래스를 이용할 수도 있습니다. 이 클래스를 사용하면 편리한 점이 많은데요. 일종의 데이터베이스 관리만을 목적으로 하는 클래스라고 보면 됩니다. 데이터 저장이나 획득 등의 코드는 SQLiteDatabase 클래스를 이용하여 insert, select 작업을 하고, 테이블 생성이나 스키마 변경 등의 작업은 SQLiteOpenHelper 클래스로 일원화하는 구조입니다. 이렇게 함으로써 select, insert 작업을 수행할 때 테이블 생성 여부를 판단하지 않아도 되는 이점이 있습니다. SQLiteOpenHelper 클래스는 추상 클래스이므로 서브 클래스를 만들어 사용해야 합니다.

 

01 class DBHelper(context: Context): SQLiteOpenHelper(context, "memodb", null, 1) {

02

03   override fun onCreate(db: SQLiteDatabase) {

04     //…

05   }

06   override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {

07     //…

08   }

09 }

 

위의 코드는 SQLiteOpenHelper를 상속받아 작성한 하위 클래스의 구조입니다. 상위 클래스 생성자 호출 구문을 보면 SQLiteOpenHelper(context, "memodb", null, 1) 구문이 있는데 "memodb"가 데이터베이스 파일명입니다. 그리고 1은 데이터베이스 버전 정보입니다. SQLiteOpenHelper를 작성 하려면 onCreate( )와 onUpgrade( ) 함수를 재정의해야 합니다.

 

  • onCreate(): 앱이 설치된 후 SQLiteOpenHelper가 최초로 이용되는 순간 한 번 호출
  • onUpgrade(): 데이터베이스 버전이 변경될 때마다 호출

 

onCreate( ) 함수는 앱이 설치되어 SQLiteOpenHelper 클래스가 최초로 사용되는 순간 호출됩니다. 결국, 전체 앱 내에서 가장 처음 한 번만 수행하면 되는 코드를 작성하고자 사용되며, 대부분 테이블을 생성하는 코드를 작성합니다. onUpgrade( ) 함수는 SQLiteOpenHelper 클래스의 생성자에 전달되는 데이터베이스 버전 정보가 변경될 때마다 반복해서 호출됩니다. 결국, 테이블의 스키마 부분을 변경하기 위한 용도로 사용됩니다. 단, version이 변경되지 않으면 호출되지 않습니다.

 

이처럼 SQLiteOpenHelper를 정의했다면 실제 SQL 문 수행을 위해 SQLiteDatabase 객체를 획득합니다. 이때는 SQLiteOpenHelper 클래스의 getReaderableDatabase ( ) 함수와 getWritableDatabase ( ) 함수를 이용합니다.

 

01 val helper = DBHelper(this)

02 val db = helper.writableDatabase