SQLite (Kotlin 멀티플랫폼)

androidx.sqlite 라이브러리에는 SQLite에 액세스하는 자체 라이브러리를 빌드하는 데 사용할 수 있는 기본 구현과 함께 추상 인터페이스가 포함되어 있습니다. 개발자는 SQLite를 완벽히 활용하면서 강력한 데이터베이스 액세스를 지원하는 SQLite에 추상화 레이어를 제공하는 Room 라이브러리 사용을 고려할 수 있습니다.

종속 항목 설정

Kotlin 멀티 플랫폼(KMP)을 지원하는 현재 androidx.sqlite 버전은 2.5.0-alpha01 이상입니다.

KMP 프로젝트에서 SQLite를 설정하려면 다음과 같이 모듈의 build.gradle.kts 파일에 아티팩트의 종속 항목을 추가합니다.

  • androidx.sqlite:sqlite - SQLite 드라이버 인터페이스
  • androidx.sqlite:sqlite-bundled - 번들 드라이버 구현

SQLite Driver API

androidx.sqlite 라이브러리 그룹은 androidx.sqlite:sqlite-bundled를 사용할 때 라이브러리에 포함되어 있거나 androidx.sqlite:sqlite-framework를 사용할 때 Android 또는 iOS와 같은 호스트 플랫폼에서 포함된 SQLite 라이브러리와 통신하기 위한 하위 수준 API를 제공합니다. API는 SQLite C API의 핵심 기능을 거의 따릅니다.

세 가지 기본 인터페이스가 있습니다.

  • SQLiteDriver - SQLite를 사용하는 진입점이며 데이터베이스 연결을 여는 역할을 합니다.
  • SQLiteConnection - sqlite3 객체의 표현입니다.
  • SQLiteStatement - sqlite3_stmt 객체의 표현입니다.

다음 예는 핵심 API를 보여줍니다.

fun main() {
  val databaseConnection = BundledSQLiteDriver().open("todos.db")
  databaseConnection.execSQL(
    "CREATE TABLE IF NOT EXISTS Todo (id INTEGER PRIMARY KEY, content TEXT)"
  )
  databaseConnection.prepare(
    "INSERT OR IGNORE INTO Todo (id, content) VALUES (? ,?)"
  ).use { stmt ->
    stmt.bindInt(index = 1, value = 1)
    stmt.bindText(index = 2, value = "Try Room in the KMP project.")
    stmt.step()
  }
  databaseConnection.prepare("SELECT content FROM Todo").use { stmt ->
    while (stmt.step()) {
      println("Action item: ${stmt.getText(0)}")
    }
  }
  databaseConnection.close()
}

SQLite C API와 마찬가지로 일반적인 사용법은 다음과 같습니다.

  • 인스턴스화된 SQLiteDriver 구현을 사용하여 데이터베이스 연결을 엽니다.
  • SQLiteConnection.prepare()를 사용하여 SQL 문 준비
  • 다음과 같이 SQLiteStatement를 실행합니다.
    • 필요한 경우 bind*() 함수를 사용하여 인수를 바인딩합니다.
    • step() 함수를 사용하여 결과 집합을 반복합니다.
    • get*() 함수를 사용하여 결과 집합에서 열 읽기

드라이버 구현

다음 표에는 사용 가능한 드라이버 구현이 요약되어 있습니다.

클래스 이름

아티팩트

지원 플랫폼

AndroidSQLiteDriver androidx.sqlite:sqlite-framework

Android

NativeSQLiteDriver androidx.sqlite:sqlite-framework

iOS, Mac, Linux

BundledSQLiteDriver androidx.sqlite:sqlite-bundled

Android, iOS, Mac, Linux, JVM (데스크톱)

사용하도록 권장되는 구현은 androidx.sqlite:sqlite-bundled에서 제공되는 BundledSQLiteDriver입니다. 소스에서 컴파일된 SQLite 라이브러리를 포함하여 지원되는 모든 KMP 플랫폼에서 최신 버전과 일관성을 제공합니다.

SQLite 드라이버 및 공간

드라이버 API는 SQLite 데이터베이스와의 하위 수준 상호작용에 유용합니다. SQLite에 대한 더 강력한 액세스를 제공하는 기능이 풍부한 라이브러리의 경우 Room을 사용하는 것이 좋습니다.

RoomDatabaseSQLiteDriver를 사용하여 데이터베이스 작업을 실행하며 구현은 RoomDatabase.Builder.setDriver()를 사용하여 구성해야 합니다. Room은 RoomDatabase.useReaderConnectionRoomDatabase.useWriterConnection를 제공하여 관리 데이터베이스 연결에 더 직접적으로 액세스할 수 있습니다.