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 SQLiteandroidx.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'oggettosqlite3
.SQLiteStatement
: è la rappresentazione dell'oggettosqlite3_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*()
.
- Facoltativamente, puoi associare gli argomenti utilizzando le funzioni
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.