SQLite (Multiplatform Kotlin)

Library androidx.sqlite berisi antarmuka abstrak beserta implementasi dasar yang dapat digunakan untuk membuat library Anda sendiri yang mengakses SQLite. Sebaiknya Anda menggunakan library Room yang menyediakan lapisan abstraksi pada SQLite untuk memungkinkan akses database yang lebih andal sambil memanfaatkan kemampuan penuh SQLite.

Menyiapkan dependensi

Versi androidx.sqlite saat ini yang mendukung Multi-Platform (KMP) Kotlin adalah 2.5.0-alpha01 atau yang lebih tinggi.

Untuk menyiapkan SQLite dalam project KMP, tambahkan dependensi untuk artefak dalam file build.gradle.kts untuk modul Anda:

  • androidx.sqlite:sqlite - Antarmuka Driver SQLite
  • androidx.sqlite:sqlite-bundled - Implementasi driver yang dipaketkan

SQLite Driver API

Grup library androidx.sqlite menawarkan API tingkat rendah untuk berkomunikasi dengan library SQLite, baik yang disertakan dalam library saat menggunakan androidx.sqlite:sqlite-bundled maupun di platform host, seperti Android atau iOS saat menggunakan androidx.sqlite:sqlite-framework. API ini mengikuti fungsi inti dari SQLite C API.

Ada 3 antarmuka utama:

  • SQLiteDriver - Ini adalah titik entri untuk menggunakan SQLite dan bertanggung jawab untuk membuka koneksi database.
  • SQLiteConnection - Adalah representasi dari objek sqlite3.
  • SQLiteStatement - Adalah representasi dari objek sqlite3_stmt.

Contoh berikut menampilkan API inti:

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()
}

Serupa dengan SQLite C API, penggunaan yang umum adalah untuk:

  • Buka koneksi database menggunakan implementasi SQLiteDriver yang dibuat instance-nya.
  • Siapkan pernyataan SQL menggunakan SQLiteConnection.prepare()
  • Jalankan SQLiteStatement dengan:
    • Secara opsional, argumen binding menggunakan fungsi bind*().
    • Melakukan iterasi pada hasil yang ditetapkan menggunakan fungsi step().
    • Membaca kolom dari kumpulan hasil menggunakan fungsi get*().

Implementasi Pengemudi

Tabel berikut merangkum implementasi driver yang tersedia:

Nama Kelas

Artefak

Platform yang Didukung

AndroidSQLiteDriver androidx.sqlite:sqlite-framework

Android

NativeSQLiteDriver androidx.sqlite:sqlite-framework

iOS, Mac, dan Linux

BundledSQLiteDriver androidx.sqlite:sqlite-bundled

Android, iOS, Mac, Linux, dan JVM (Desktop)

Penerapan yang direkomendasikan untuk digunakan adalah BundledSQLiteDriver yang tersedia di androidx.sqlite:sqlite-bundled. Library ini menyertakan library SQLite yang dikompilasi dari sumber, menawarkan versi dan konsistensi terbaru di semua platform KMP yang didukung.

Driver dan Room SQLite

API driver berguna untuk interaksi tingkat rendah dengan database SQLite. Untuk library kaya fitur yang memberikan akses SQLite yang lebih andal, Room direkomendasikan.

RoomDatabase bergantung pada SQLiteDriver untuk menjalankan operasi database dan implementasi harus dikonfigurasi menggunakan RoomDatabase.Builder.setDriver(). Room menyediakan RoomDatabase.useReaderConnection dan RoomDatabase.useWriterConnection untuk akses langsung yang lebih besar ke koneksi database terkelola.