SQLite (Kotlin multiplataforma)

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 SQLite
  • androidx.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 objeto sqlite3.
  • SQLiteStatement: Es la representación del objeto sqlite3_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*()

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.