SQLite (Kotlin Multiplatform)

androidx.sqlite 程式庫包含抽象介面和基本 可用於建構自己的程式庫 或 SQLite。建議您使用 Room 程式庫 SQLite 上的抽象層 可強化資料庫存取權 它能充分發揮 SQLite 功能的效用

設定依附元件

目前支援 Kotlin 多平台的 androidx.sqlite 版本 (KMP) 為 2.5.0-alpha01 以上版本。

如要在 KMP 專案中設定 SQLite,請新增構件的依附元件 在模組的 build.gradle.kts 檔案中:

  • androidx.sqlite:sqlite - SQLite 驅動程式介面
  • androidx.sqlite:sqlite-bundled:隨附驅動程式實作

SQLite 驅動程式 API

androidx.sqlite 程式庫群組提供低階 API,可用於與 使用 kubectl 指令 androidx.sqlite:sqlite-bundled 或代管平台 (例如 Android 或 iOS) 中 使用 androidx.sqlite:sqlite-framework 時,可達到這個目的。API 會隨著 SQLite C API 的功能

這裡有 3 個主要介面:

以下範例說明核心 API:

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

常見用法與 SQLite C API 類似:

  • 使用例項化的 SQLiteDriver 開啟資料庫連線 。
  • 使用 SQLiteConnection.prepare() 準備 SQL 陳述式
  • 透過以下方式執行 SQLiteStatement
    • 視需要使用 bind*() 函式繫結引數。
    • 使用 step() 函式疊代結果集。
    • 使用 get*() 函式從結果集讀取資料欄。
,瞭解如何調查及移除這項存取權。

驅動程式實作

下表摘要列出可用的驅動程式實作:

課程名稱

構件

支援的平台

AndroidSQLiteDriver androidx.sqlite:sqlite-framework

Android

NativeSQLiteDriver androidx.sqlite:sqlite-framework

iOS、Mac 和 Linux

BundledSQLiteDriver androidx.sqlite:sqlite-bundled

Android、iOS、Mac、Linux 和 JVM (電腦)

建議您使用下列的實作方式:BundledSQLiteDriver androidx.sqlite:sqlite-bundled。其中包含編譯自以下來源的 SQLite 程式庫: 可提供最新版本的所有平台 支援 KMP 平台。

SQLite 驅動程式和 Room

驅動程式 API 適合用於與 SQLite 資料庫的低階互動。 針對可提供更強大 SQLite 且功能豐富的程式庫, 建議您預訂會議室。

RoomDatabase 需要使用 SQLiteDriver 來執行資料庫作業,以及 實作時必須透過 RoomDatabase.Builder.setDriver()。Room 提供 RoomDatabase.useReaderConnection 和 使用 RoomDatabase.useWriterConnection,以便更直接地存取受管理的 和資料庫連線