SQLite (platforma Kotlin wieloplatformowa)

Biblioteka androidx.sqlite zawiera abstrakcyjne interfejsy oraz podstawowe implementacje, których możesz używać do tworzenia własnych bibliotek uzyskujących dostęp do SQLite. Rozważ użycie biblioteki Room, która udostępnia warstwę abstrakcji zamiast SQLite, aby zapewnić solidniejszy dostęp do baz danych i jednocześnie wykorzystać pełne możliwości SQLite.

Konfigurowanie zależności

Bieżąca wersja androidx.sqlite, która obsługuje platformę Kotlin Multi-Platform (KMP), to 2.5.0-alpha01 lub nowsza.

Aby skonfigurować SQLite w projekcie KMP, dodaj zależności artefaktów w pliku build.gradle.kts modułu:

  • androidx.sqlite:sqlite – interfejsy sterownika SQLite
  • androidx.sqlite:sqlite-bundled – implementacja pakietu sterownika

Interfejsy API sterowników SQLite

Grupy bibliotek androidx.sqlite oferują niskopoziomowe interfejsy API do komunikacji z biblioteką SQLite, które znajdują się w bibliotece podczas korzystania z androidx.sqlite:sqlite-bundled lub na platformie hosta, takiej jak Android lub iOS, gdy używana jest androidx.sqlite:sqlite-framework. Interfejsy API są ściśle zgodne z podstawowymi funkcjami interfejsu SQLite C API.

Dostępne są 3 główne interfejsy:

W przykładzie poniżej przedstawiamy najważniejsze interfejsy 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()
}

Podobnie jak w przypadku interfejsów API SQLite C, typowe zastosowanie to:

  • Otwórz połączenie z bazą danych za pomocą utworzonej instancji SQLiteDriver.
  • Przygotuj instrukcję SQL za pomocą SQLiteConnection.prepare()
  • Wykonaj SQLiteStatement przez:
    • Opcjonalnie wiąż argumenty za pomocą funkcji bind*().
    • Wykonanie iteracji na zbiorze wyników przy użyciu funkcji step().
    • Odczytywanie kolumn ze zbioru wyników za pomocą funkcji get*().

Implementacje sterowników

W tabeli poniżej znajdziesz podsumowanie dostępnych implementacji sterowników:

Nazwa zajęć

Artefakt

Obsługiwane platformy

AndroidSQLiteDriver androidx.sqlite:sqlite-framework

Android

NativeSQLiteDriver androidx.sqlite:sqlite-framework

iOS, Mac i Linux

BundledSQLiteDriver androidx.sqlite:sqlite-bundled

Android, iOS, Mac, Linux i JVM (komputery)

Zalecana implementacja, której chcesz użyć, to BundledSQLiteDriver dostępna w usłudze androidx.sqlite:sqlite-bundled. Zawiera ona skompilowaną ze źródła bibliotekę SQLite, która oferuje najbardziej aktualną wersję i spójność we wszystkich obsługiwanych platformach KMP.

Sterownik SQLite i miejsce

Interfejsy API sterowników są przydatne w przypadku niskopoziomowych interakcji z bazą danych SQLite. Jeśli chcesz utworzyć bibliotekę z bogatą funkcją, która zapewnia solidniejszy dostęp do SQLite, zalecana jest sala.

Do wykonywania operacji na bazie danych RoomDatabase wykorzystuje element SQLiteDriver, a implementacja musi być skonfigurowana za pomocą RoomDatabase.Builder.setDriver(). Sala ma interfejsy RoomDatabase.useReaderConnection i RoomDatabase.useWriterConnection, które zapewniają bardziej bezpośredni dostęp do zarządzanych połączeń bazy danych.