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 uses la biblioteca de Room, que brinda
una capa de abstracción sobre SQLite para permitir un acceso más sólido a la base de datos mientras
aprovechar toda la potencia de SQLite.
Configura dependencias
La versión actual de androidx.sqlite
que es compatible con Kotlin multiplataforma
(KMP) es 2.5.0-alpha01 o una versión posterior.
Para configurar SQLite en tu proyecto KMP, agrega las dependencias para los artefactos.
En el archivo build.gradle.kts
de tu módulo:
androidx.sqlite:sqlite
: Las interfaces del controlador de SQLiteandroidx.sqlite:sqlite-bundled
: Es la implementación del controlador agrupado.
APIs del controlador de SQLite
Los grupos de bibliotecas androidx.sqlite
ofrecen APIs de bajo nivel para comunicarse con
la biblioteca SQLite que se incluye en la biblioteca cuando se usa
androidx.sqlite:sqlite-bundled
o en la plataforma host, como Android o iOS
cuando uses androidx.sqlite:sqlite-framework
. Las APIs siguen de cerca la raíz
de la API de SQLite C.
Hay 3 interfaces principales:
SQLiteDriver
: Es el punto de entrada para usar SQLite y es responsable. para abrir conexiones de bases 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()
}
De manera similar a las APIs de SQLite para C, el uso común es el siguiente:
- Abre una conexión de base de datos usando el
SQLiteDriver
con instanciado para implementarlos. - Prepara una instrucción de SQL con
SQLiteConnection.prepare()
- Ejecuta un
SQLiteStatement
de la siguiente manera:- De manera opcional, vincula argumentos con las funciones
bind*()
. - Iteración sobre el conjunto de resultados con la función
step()
- Leer columnas del conjunto de resultados con las funciones
get*()
- De manera opcional, vincula argumentos con las funciones
Implementaciones de controladores
En la siguiente tabla, se resumen las implementaciones de controladores disponibles:
Nombre de la 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 es BundledSQLiteDriver
, que se encuentra disponible en
androidx.sqlite:sqlite-bundled
Incluye la biblioteca SQLite compilada a partir de
fuente, lo que ofrece la versión más actualizada y coherencia en todas las
plataformas KMP compatibles.
Controlador y Room de SQLite
Las APIs del controlador son útiles para las interacciones de bajo nivel con una base de datos SQLite. Para obtener una biblioteca con muchas funciones que proporcione un acceso más sólido a SQLite, Se recomienda usar una sala de reuniones.
Un RoomDatabase
se basa en un SQLiteDriver
para realizar operaciones de bases de datos.
se requiere que una implementación se configure
RoomDatabase.Builder.setDriver()
La sala ofrece
RoomDatabase.useReaderConnection
y
RoomDatabase.useWriterConnection
para obtener un acceso más directo al
conexiones de bases de datos.