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