Die androidx.sqlite
-Bibliothek enthält abstrakte Schnittstellen mit grundlegenden Implementierungen, mit denen Sie Ihre eigenen Bibliotheken erstellen können, die auf SQLite zugreifen. Sie können die Bibliothek Room verwenden. Sie bietet eine Abstraktionsebene über SQLite, um einen robusteren Datenbankzugriff zu ermöglichen und gleichzeitig die volle Leistung von SQLite zu nutzen.
Abhängigkeiten einrichten
Die aktuelle Version von androidx.sqlite
, die Kotlin Multi-Platform (KMP) unterstützt, ist Version 2.5.0-alpha01 oder höher.
Fügen Sie der Datei build.gradle.kts
für Ihr Modul die Abhängigkeiten für die Artefakte hinzu, um SQLite in Ihrem KMP-Projekt einzurichten:
androidx.sqlite:sqlite
– die SQLite-Treiberschnittstellenandroidx.sqlite:sqlite-bundled
– die gebündelte Treiberimplementierung
SQLite-Treiber-APIs
Die androidx.sqlite
-Bibliotheksgruppen bieten Low-Level-APIs für die Kommunikation mit der SQLite-Bibliothek an, die entweder in der Bibliothek bei Verwendung von androidx.sqlite:sqlite-bundled
oder auf der Hostplattform wie Android oder iOS bei Verwendung von androidx.sqlite:sqlite-framework
enthalten ist. Die APIs stützen sich eng auf die Kernfunktionen der SQLite C API.
Es gibt drei Hauptoberflächen:
SQLiteDriver
: Der Einstiegspunkt für die Verwendung von SQLite und das Öffnen von Datenbankverbindungen.SQLiteConnection
– die Darstellung dessqlite3
-Objekts.SQLiteStatement
– die Darstellung dessqlite3_stmt
-Objekts.
Im folgenden Beispiel werden die wichtigsten APIs veranschaulicht:
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()
}
Ähnlich wie bei SQLite C APIs werden folgende Anwendungen häufig verwendet:
- Öffnen Sie mit der instanziierten
SQLiteDriver
-Implementierung eine Datenbankverbindung. - SQL-Anweisung mit
SQLiteConnection.prepare()
vorbereiten - So führen Sie ein
SQLiteStatement
aus:- Optional: Binden Sie Argumente mithilfe der
bind*()
-Funktionen. - Durch Iteration über den Ergebnissatz mit der Funktion
step()
. - Lesen von Spalten aus der Ergebnismenge mithilfe der
get*()
-Funktionen
- Optional: Binden Sie Argumente mithilfe der
Treiberimplementierungen
In der folgenden Tabelle sind die verfügbaren Treiberimplementierungen zusammengefasst:
Klassenname |
Artefakt |
Unterstützte Plattformen |
AndroidSQLiteDriver |
androidx.sqlite:sqlite-framework |
Android |
NativeSQLiteDriver |
androidx.sqlite:sqlite-framework |
iOS, Mac und Linux |
BundledSQLiteDriver |
androidx.sqlite:sqlite-bundled |
Android, iOS, Mac, Linux und JVM (Desktop) |
Die empfohlene Implementierung ist BundledSQLiteDriver
, der in androidx.sqlite:sqlite-bundled
verfügbar ist. Sie enthält die aus der Quelle kompilierte SQLite-Bibliothek und bietet die aktuellste Version und Konsistenz auf allen unterstützten KMP-Plattformen.
SQLite-Treiber und -Raum
Die Treiber-APIs sind nützlich für Low-Level-Interaktionen mit einer SQLite-Datenbank. Raum wird für eine funktionsreiche Bibliothek, die einen umfassenderen Zugriff auf SQLite bietet, empfohlen.
Ein RoomDatabase
benötigt einen SQLiteDriver
, um Datenbankvorgänge auszuführen, und eine Implementierung muss mit RoomDatabase.Builder.setDriver()
konfiguriert werden. Room bietet RoomDatabase.useReaderConnection
und RoomDatabase.useWriterConnection
für einen direkteren Zugriff auf die verwalteten Datenbankverbindungen.