SQLite (Kotlin Multiplatform)

La libreria androidx.sqlite contiene interfacce astratte insieme ad implementazioni di base che possono essere utilizzate per creare le tue librerie che accedono a SQLite. Ti consigliamo di utilizzare la libreria Room, che fornisce un livello di astrazione rispetto a SQLite per consentire un accesso al database più solido, sfruttando al contempo tutta la potenza di SQLite.

Configurazione delle dipendenze

La versione corrente di androidx.sqlite che supporta Kotlin Multi-Platform (KMP) è 2.5.0-alpha01 o successive.

Per configurare SQLite nel progetto KMP, aggiungi le dipendenze per gli artefatti nel file build.gradle.kts per il tuo modulo:

  • androidx.sqlite:sqlite - Le interfacce del driver SQLite
  • androidx.sqlite:sqlite-bundled: implementazione del driver in bundle

API SQLite Driver

I gruppi di librerie androidx.sqlite offrono API di basso livello per comunicare con la libreria SQLite inclusa nella libreria quando si utilizza androidx.sqlite:sqlite-bundled oppure nella piattaforma host, ad esempio Android o iOS quando si utilizza androidx.sqlite:sqlite-framework. Le API seguono da vicino le funzionalità di base dell'API SQLite C.

Esistono tre interfacce principali:

  • SQLiteDriver - È il punto di ingresso per utilizzare SQLite ed è responsabile dell'apertura delle connessioni ai database.
  • SQLiteConnection: è la rappresentazione dell'oggetto sqlite3.
  • SQLiteStatement: è la rappresentazione dell'oggetto sqlite3_stmt.

L'esempio seguente illustra le API di base:

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

Analogamente alle API SQLite C, l'utilizzo comune è:

  • Apri una connessione al database utilizzando l'implementazione SQLiteDriver all'istanza.
  • Prepara un'istruzione SQL utilizzando SQLiteConnection.prepare()
  • Esegui un SQLiteStatement tramite:
    • Facoltativamente, puoi associare gli argomenti utilizzando le funzioni bind*().
    • Eseguire un'iterazione sul set di risultati utilizzando la funzione step().
    • Lettura delle colonne del set di risultati mediante le funzioni get*().

Implementazioni dei driver

La seguente tabella riassume le implementazioni dei driver disponibili:

Nome corso

Elemento

Piattaforme supportate

AndroidSQLiteDriver androidx.sqlite:sqlite-framework

Android

NativeSQLiteDriver androidx.sqlite:sqlite-framework

iOS, Mac e Linux

BundledSQLiteDriver androidx.sqlite:sqlite-bundled

Android, iOS, Mac, Linux e JVM (computer)

L'implementazione consigliata è BundledSQLiteDriver disponibile in androidx.sqlite:sqlite-bundled. Include la libreria SQLite compilata dall'origine, che offre la versione più aggiornata e coerenza su tutte le piattaforme KMP supportate.

Driver e stanza virtuale SQLite

Le API driver sono utili per le interazioni di basso livello con un database SQLite. Per una libreria ricca di funzionalità che offre un accesso più affidabile a SQLite, ti consigliamo di utilizzare Room.

Un elemento RoomDatabase si basa su un SQLiteDriver per eseguire le operazioni di database ed è necessario configurare un'implementazione utilizzando RoomDatabase.Builder.setDriver(). La stanza fornisce RoomDatabase.useReaderConnection e RoomDatabase.useWriterConnection per un accesso più diretto alle connessioni del database gestite.