La bibliothèque androidx.sqlite
contient des interfaces abstraites ainsi que des implémentations de base permettant de créer vos propres bibliothèques utilisant SQLite. Vous pouvez envisager d'utiliser la bibliothèque Room, qui fournit une couche d'abstraction sur SQLite pour offrir un accès plus robuste à la base de données tout en exploitant toute la puissance de SQLite.
Configurer des dépendances
La version actuelle de androidx.sqlite
compatible avec Kotlin Multi-Platform (KMP) est 2.5.0-alpha01 ou une version ultérieure.
Pour configurer SQLite dans votre projet KMP, ajoutez les dépendances des artefacts dans le fichier build.gradle.kts
de votre module:
androidx.sqlite:sqlite
: interfaces du pilote SQLiteandroidx.sqlite:sqlite-bundled
: implémentation du pilote groupé
API SQLite Driver
Les groupes de bibliothèques androidx.sqlite
proposent des API de bas niveau pour communiquer avec la bibliothèque SQLite, soit incluses dans la bibliothèque lorsque vous utilisez androidx.sqlite:sqlite-bundled
, soit dans la plate-forme hôte, comme Android ou iOS lorsque vous utilisez androidx.sqlite:sqlite-framework
. Les API suivent de près les fonctionnalités de base de l'API SQLite C.
Il existe trois interfaces principales:
SQLiteDriver
: point d'entrée pour utiliser SQLite et responsable de l'ouverture des connexions à la base de données.SQLiteConnection
: est la représentation de l'objetsqlite3
.SQLiteStatement
: est la représentation de l'objetsqlite3_stmt
.
L'exemple suivant présente les principales API:
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()
}
Comme pour les API SQLite C, leur utilisation est courante pour:
- Ouvrez une connexion de base de données à l'aide de l'implémentation
SQLiteDriver
instanciée. - Préparer une instruction SQL à l'aide de
SQLiteConnection.prepare()
- Exécutez une opération
SQLiteStatement
en procédant comme suit :- Vous pouvez éventuellement lier des arguments à l'aide des fonctions
bind*()
. - Itération de l'ensemble de résultats à l'aide de la fonction
step()
- Lecture des colonnes de l'ensemble de résultats à l'aide des fonctions
get*()
.
- Vous pouvez éventuellement lier des arguments à l'aide des fonctions
Implémentations des pilotes
Le tableau suivant récapitule les implémentations de pilotes disponibles:
Nom du cours |
Artefact |
Plates-formes compatibles |
AndroidSQLiteDriver |
androidx.sqlite:sqlite-framework |
Android |
NativeSQLiteDriver |
androidx.sqlite:sqlite-framework |
iOS, Mac et Linux |
BundledSQLiteDriver |
androidx.sqlite:sqlite-bundled |
Android, iOS, Mac, Linux et JVM (ordinateur de bureau) |
L'implémentation recommandée est BundledSQLiteDriver
, disponible dans androidx.sqlite:sqlite-bundled
. Elle inclut la bibliothèque SQLite compilée à partir de la source, offrant la version et la cohérence la plus récente sur toutes les plates-formes KMP compatibles.
Pilote SQLite et Room
Les API de pilote sont utiles pour les interactions de bas niveau avec une base de données SQLite. Pour bénéficier d'une bibliothèque riche en fonctionnalités offrant un accès plus robuste à SQLite, nous vous recommandons d'utiliser Room.
Un RoomDatabase
s'appuie sur un SQLiteDriver
pour effectuer des opérations de base de données. Vous devez configurer une implémentation à l'aide de RoomDatabase.Builder.setDriver()
. Room fournit RoomDatabase.useReaderConnection
et RoomDatabase.useWriterConnection
pour un accès plus direct aux connexions à la base de données gérées.