SQLite (đa nền tảng Kotlin)

Thư viện androidx.sqlite chứa các lớp giao tiếp trừu tượng cùng với các hàm triển khai cơ bản giúp bạn tự xây dựng những thư viện liên kết với SQLite. Bạn nên cân nhắc sử dụng thư viện Room. Thư viện này cung cấp một tầng trừu tượng trên SQLite để cho phép truy cập cơ sở dữ liệu hiệu quả hơn trong khi khai thác toàn bộ sức mạnh của SQLite.

Thiết lập phần phụ thuộc

Phiên bản hiện tại của androidx.sqlite hỗ trợ Kotlin Multi-Platform (KMP) là 2.5.0-alpha01 trở lên.

Để thiết lập SQLite trong dự án KMP, hãy thêm phần phụ thuộc cho cấu phần phần mềm trong tệp build.gradle.kts cho mô-đun của bạn:

  • androidx.sqlite:sqlite – Giao diện Trình điều khiển SQLite
  • androidx.sqlite:sqlite-bundled – Triển khai trình điều khiển đi kèm

API trình điều khiển SQLite

Các nhóm thư viện androidx.sqlite cung cấp API cấp thấp để giao tiếp với thư viện SQLite có trong thư viện khi sử dụng androidx.sqlite:sqlite-bundled hoặc trong nền tảng lưu trữ, chẳng hạn như Android hoặc iOS khi dùng androidx.sqlite:sqlite-framework. Các API tuân thủ chặt chẽ phần cốt lõi của SQLite C API.

Có 3 giao diện chính:

  • SQLiteDriver – Đây là điểm truy cập để sử dụng SQLite và chịu trách nhiệm để mở các kết nối cơ sở dữ liệu.
  • SQLiteConnection – Là đại diện của đối tượng sqlite3.
  • SQLiteStatement – Là đại diện của đối tượng sqlite3_stmt.

Ví dụ sau đây trình bày các API cốt lõi:

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

Tương tự như API SQLite C, cách sử dụng phổ biến là:

  • Mở kết nối cơ sở dữ liệu bằng SQLiteDriver đã tạo thực thể trong quá trình triển khai.
  • Chuẩn bị câu lệnh SQL bằng SQLiteConnection.prepare()
  • Thực thi SQLiteStatement bằng cách:
    • Liên kết tuỳ ý các đối số bằng cách sử dụng các hàm bind*().
    • Lặp lại tập hợp kết quả bằng cách sử dụng hàm step().
    • Đọc các cột trong tập hợp kết quả bằng các hàm get*().

Triển khai trình điều khiển

Bảng sau đây tóm tắt các cách triển khai trình điều khiển có sẵn:

Tên lớp

Cấu phần phần mềm

Nền tảng được hỗ trợ

AndroidSQLiteDriver androidx.sqlite:sqlite-framework

Android

NativeSQLiteDriver androidx.sqlite:sqlite-framework

iOS, Mac và Linux

BundledSQLiteDriver androidx.sqlite:sqlite-bundled

Android, iOS, Mac, Linux và JVM (Máy tính)

Cách triển khai được đề xuất để sử dụng là BundledSQLiteDriver có sẵn trong androidx.sqlite:sqlite-bundled. Thư viện này bao gồm thư viện SQLite được biên dịch từ nguồn, cung cấp phiên bản cập nhật nhất và tính nhất quán trên tất cả các nền tảng KMP được hỗ trợ.

Room và trình điều khiển SQLite

API trình điều khiển rất hữu ích cho các hoạt động tương tác cấp thấp với cơ sở dữ liệu SQLite. Đối với thư viện nhiều tính năng cung cấp quyền truy cập mạnh mẽ hơn vào SQLite, thì Bạn nên chọn phòng.

RoomDatabase dựa vào SQLiteDriver để thực hiện các thao tác với cơ sở dữ liệu và bắt buộc phải định cấu hình quá trình triển khai bằng RoomDatabase.Builder.setDriver(). Dịch vụ phòng RoomDatabase.useReaderConnectionRoomDatabase.useWriterConnection để có thêm quyền truy cập trực tiếp vào kết nối cơ sở dữ liệu.