SQLite (Kotlin multiplataforma)

A biblioteca androidx.sqlite contém interfaces abstratas com implementações básicas que podem ser usadas para criar bibliotecas que acessam o SQLite. Você pode usar a biblioteca Room, que oferece uma camada de abstração sobre o SQLite para permitir um acesso mais robusto ao banco de dados enquanto Aproveite toda a capacidade do SQLite.

Como configurar dependências

A versão atual de androidx.sqlite com suporte ao Kotlin Multi-Platform. (KMP) é 2.5.0-alpha01 ou mais recente.

Para configurar o SQLite no seu projeto KMP, adicione as dependências dos artefatos no arquivo build.gradle.kts do seu módulo:

  • androidx.sqlite:sqlite: as interfaces do driver do SQLite
  • androidx.sqlite:sqlite-bundled: implementação do driver incluído

APIs de driver do SQLite

Os grupos de bibliotecas androidx.sqlite oferecem APIs de baixo nível para se comunicar com da biblioteca SQLite incluída na biblioteca ao usar androidx.sqlite:sqlite-bundled ou na plataforma host, como Android ou iOS ao usar androidx.sqlite:sqlite-framework. As APIs seguem de perto o princípio funcionalidade da API SQLite C.

Há três interfaces principais:

  • SQLiteDriver: é o ponto de entrada para usar o SQLite e é responsável. para abrir conexões de banco de dados.
  • SQLiteConnection: é a representação do objeto sqlite3.
  • SQLiteStatement: é a representação do objeto sqlite3_stmt.

O exemplo a seguir mostra as principais APIs:

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()
}

Semelhante às APIs SQLite C, o uso comum é:

  • Abra uma conexão de banco de dados usando o SQLiteDriver instanciado implementação.
  • Preparar uma instrução SQL usando SQLiteConnection.prepare()
  • Execute um SQLiteStatement ao:
    • Vinculação opcional de argumentos usando as funções bind*().
    • Iteração no conjunto de resultados usando a função step().
    • Ler colunas do conjunto de resultados usando as funções get*().
.

Implementações dos impulsionadores

A tabela a seguir resume as implementações de driver disponíveis:

Nome da turma

Artefato

Plataformas compatíveis

AndroidSQLiteDriver androidx.sqlite:sqlite-framework

Android

NativeSQLiteDriver androidx.sqlite:sqlite-framework

iOS, Mac e Linux

BundledSQLiteDriver androidx.sqlite:sqlite-bundled

Android, iOS, Mac, Linux e JVM (computador)

A implementação recomendada para uso é BundledSQLiteDriver, disponível em androidx.sqlite:sqlite-bundled. Ele inclui a biblioteca SQLite compilada fonte, oferecendo a versão mais atualizada e consistência em todas as plataformas de KMP suportadas.

Driver e Room do SQLite

As APIs do driver são úteis para interações de baixo nível com um banco de dados SQLite. Para uma biblioteca rica em recursos que fornece um acesso mais robusto ao SQLite, então O Room é recomendado.

Um RoomDatabase depende de um SQLiteDriver para executar operações de banco de dados e uma implementação precisa ser configurada usando RoomDatabase.Builder.setDriver(). O quarto oferece RoomDatabase.useReaderConnection e RoomDatabase.useWriterConnection para ter acesso mais direto ao conexões de banco de dados.