SQLite (Kotlin Multiplatform)

La libreria androidx.sqlite contiene interfacce astratte oltre alle interfacce di base implementazioni che possono essere usate per creare librerie che accedono SQLite. Potresti prendere in considerazione l'utilizzo della libreria Room, che fornisce un livello di astrazione su SQLite per consentire un accesso più solido al database, sfruttando tutta la potenza di SQLite.

Configurazione delle dipendenze

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

Per configurare SQLite nel tuo 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: l'implementazione del driver in bundle

API dei driver SQLite

I gruppi di librerie androidx.sqlite offrono API di basso livello per la comunicazione con la libreria SQLite inclusa nella libreria quando si utilizza androidx.sqlite:sqlite-bundled o nella piattaforma host, ad esempio Android o iOS quando utilizzi androidx.sqlite:sqlite-framework. Le API seguono da vicino delle API SQLite C.

Esistono 3 interfacce principali:

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

L'esempio seguente illustra le API principali:

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 di database utilizzando l'istanza di SQLiteDriver creata implementazione.
  • Prepara un'istruzione SQL utilizzando SQLiteConnection.prepare()
  • Esegui un SQLiteStatement mediante:
    • Facoltativamente, è possibile associare argomenti utilizzando le funzioni bind*().
    • È necessario ripetere l'iterazione sul set di risultati utilizzando la funzione step().
    • Lettura di colonne dal set di risultati utilizzando le funzioni get*().
di Gemini Advanced.

Implementazioni dei driver

La seguente tabella riassume le implementazioni disponibili dei driver:

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

L'implementazione consigliata è BundledSQLiteDriver disponibile in androidx.sqlite:sqlite-bundled. Include la libreria SQLite compilata il codice sorgente, che offre la versione più aggiornata e la coerenza 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, allora È consigliata la stanza.

Un RoomDatabase si basa su un SQLiteDriver per eseguire operazioni di database e è necessario configurare un'implementazione RoomDatabase.Builder.setDriver() Le camere offrono RoomDatabase.useReaderConnection e RoomDatabase.useWriterConnection per un accesso più diretto ai e connessioni ai database.