Skip to content

Android에서 SQLite 시작하기

먼저 프로젝트에 Gradle 플러그인을 적용하고.

kotlin
plugins {
  id("app.cash.sqldelight") version "2.1.0"
}
 
repositories {
  google()
  mavenCentral()
}

sqldelight {
  databases {
    register("Database") {
      packageName.set("com.example")
    }
  }
}
groovy
plugins {
  id "app.cash.sqldelight" version "2.1.0"
}

repositories {
  google()
  mavenCentral()
}

sqldelight {
  databases {
    register("Database") { // 이는 생성될 데이터베이스 클래스의 이름이 됩니다.
      packageName = "com.example"
    }
  }
}

tip
elight 파일을 더 쉽게 찾고 편집할 수 있도록 Android Studio의 파일 보기를 "Android" 보기 대신 "Project" 보기로 전환하는 것이 좋습니다.


문을 `src/main/sqldelight` 아래의 `.sq` 파일에 작성하세요.
로 `.sq` 파일의 첫 번째 문은 테이블을 생성하지만, 인덱스를 생성하거나 기본 콘텐츠를 설정할 수도 있습니다.

ql title="src/main/sqldelight/com/example/sqldelight/hockey/data/Player.sq"
TE TABLE hockeyPlayer (
ayer_number INTEGER PRIMARY KEY NOT NULL,
ll_name TEXT NOT NULL


TE INDEX hockeyPlayer_full_name ON hockeyPlayer(full_name);

RT INTO hockeyPlayer (player_number, full_name)
ES (15, 'Ryan Getzlaf');

문들을 바탕으로 SQLDelight는 데이터베이스를 생성하고 SQL 문을 실행하는 데 사용할 수 있는 연관된 `Schema` 객체를 포함한 `Database` 클래스를 생성합니다. `Database` 클래스는 `generateSqlDelightInterface` Gradle 태스크에 의해 생성되며, 이 태스크는 `.sq` 파일을 편집할 때 SQLDelight IDE 플러그인에 의해 자동으로 실행되거나 일반적인 Gradle 빌드의 일부로 실행됩니다.

데이터베이스를 코드에서 사용하려면 프로젝트에 SQLDelight Android 드라이버 의존성을 추가해야 합니다.

"Kotlin"
dependencies {
  implementation("app.cash.sqldelight:android-driver:2.1.0")
}
```
groovy
dependencies {
  implementation "app.cash.sqldelight:android-driver:2.1.0"
}

드라이버 인스턴스는 아래와 같이 생성할 수 있으며, 생성된 Schema 객체에 대한 참조가 필요합니다.

kotlin
val driver: SqlDriver = AndroidSqliteDriver(Database.Schema, context, "test.db")

INFO

AndroidSqliteDriver는 드라이버가 생성될 때 스키마를 자동으로 생성하거나 마이그레이션합니다. 필요한 경우 마이그레이션을 수동으로 실행할 수도 있습니다. 자세한 내용은 Code Migrations를 참조하세요.

타입 세이프(Typesafe) 쿼리 정의하기

SQLDelight는 .sq 파일에 레이블(labeled)이 지정된 모든 SQL 문에 대해 타입 세이프 함수를 생성합니다.

sql
selectAll:
SELECT *
FROM hockeyPlayer;

insert:
INSERT INTO hockeyPlayer(player_number, full_name)
VALUES (?, ?);

insertFullPlayerObject:
INSERT INTO hockeyPlayer(player_number, full_name)
VALUES ?;

레이블이 지정된 문이 포함된 각 .sq 파일에 대해 "Queries" 객체가 생성됩니다. 예를 들어, 위에서 보여준 Player.sq 파일에 대해 PlayerQueries 객체가 생성됩니다. 이 객체를 사용하여 실제 SQL 문을 실행하는 생성된 타입 세이프 함수를 호출할 수 있습니다.

kotlin
fun doDatabaseThings(driver: SqlDriver) {
  val database = Database(driver)
  val playerQueries: PlayerQueries = database.playerQueries

  println(playerQueries.selectAll().AsList()) 
  // [HockeyPlayer(15, "Ryan Getzlaf")]

  playerQueries.insert(player_number = 10, full_name = "Corey Perry")
  println(playerQueries.selectAll().AsList()) 
  // [HockeyPlayer(15, "Ryan Getzlaf"), HockeyPlayer(10, "Corey Perry")]

  val player = HockeyPlayer(10, "Ronald McDonald")
  playerQueries.insertFullPlayerObject(player)
}

이상입니다! 다른 기능에 대해서는 사이드바의 다른 페이지들을 참조해 주세요.

SQLite 버전

Android 프로젝트의 경우, SQLDelight Gradle 플러그인은 프로젝트의 minSdkVersion 설정을 기반으로 SQLite dialect 버전을 자동으로 선택합니다. 각 Android SDK 레벨에서 지원되는 SQLite 버전 목록은 여기에서 확인할 수 있습니다.