La biblioteca androidx.sqlite
contiene interfaces abstractas junto con implementaciones básicas que se pueden usar para compilar tus propias bibliotecas que acceden a SQLite. Te recomendamos que consideres usar la biblioteca de Room, que proporciona una capa de abstracción para SQLite que permite acceder a la base de datos sin problemas y, al mismo tiempo, aprovechar toda la potencia de SQLite.
Configura dependencias
La versión actual de androidx.sqlite
compatible con Kotlin multiplataforma (KMP) es la 2.5.0-alpha01 o una posterior.
Para configurar SQLite en tu proyecto KMP, agrega las dependencias de los artefactos en el archivo build.gradle.kts
de tu módulo:
androidx.sqlite:sqlite
: Interfaces del controlador de SQLiteandroidx.sqlite:sqlite-bundled
: Es la implementación del controlador empaquetado.
APIs de controlador de SQLite
Los grupos de bibliotecas androidx.sqlite
ofrecen APIs de bajo nivel para comunicarse con la biblioteca de SQLite, ya sea incluida en la biblioteca cuando se usa androidx.sqlite:sqlite-bundled
o en la plataforma host, como Android o iOS, cuando se usa androidx.sqlite:sqlite-framework
. Las APIs siguen de cerca la funcionalidad principal de la API de SQLite para C.
Hay 3 interfaces principales:
SQLiteDriver
: Es el punto de entrada para usar SQLite y es responsable de abrir las conexiones de la base de datos.SQLiteConnection
: Es la representación del objetosqlite3
.SQLiteStatement
: Es la representación del objetosqlite3_stmt
.
En el siguiente ejemplo, se muestran las APIs principales:
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()
}
Al igual que las APIs de SQLite C, el uso común es el siguiente:
- Abre una conexión de base de datos con la implementación de
SQLiteDriver
con instancia. - Prepara una instrucción de SQL con
SQLiteConnection.prepare()
- Ejecuta un
SQLiteStatement
de la siguiente manera:- Opcionalmente, vincular argumentos con las funciones
bind*()
- Iterar sobre el conjunto de resultados mediante la función
step()
- Leer columnas del conjunto de resultados con las funciones
get*()
- Opcionalmente, vincular argumentos con las funciones
Implementaciones de controladores
En la siguiente tabla, se resumen las implementaciones de controladores disponibles:
Nombre de clase |
Artefacto |
Plataformas admitidas |
AndroidSQLiteDriver |
androidx.sqlite:sqlite-framework |
Android |
NativeSQLiteDriver |
androidx.sqlite:sqlite-framework |
iOS, Mac y Linux |
BundledSQLiteDriver |
androidx.sqlite:sqlite-bundled |
Android, iOS, Mac, Linux y JVM (computadoras de escritorio) |
La implementación recomendada para usar es BundledSQLiteDriver
disponible en androidx.sqlite:sqlite-bundled
. Incluye la biblioteca de SQLite compilada desde la fuente, que ofrece la versión más actualizada y coherencia en todas las plataformas de KMP compatibles.
Controlador y Room de SQLite
Las APIs del controlador son útiles para interacciones de bajo nivel con una base de datos SQLite. Se recomienda Room para una biblioteca con muchas funciones que proporcione un acceso más sólido a SQLite.
Un RoomDatabase
se basa en un SQLiteDriver
para realizar operaciones de base de datos y se debe configurar una implementación con RoomDatabase.Builder.setDriver()
. Room proporciona RoomDatabase.useReaderConnection
y RoomDatabase.useWriterConnection
para un acceso más directo a las conexiones de bases de datos administradas.