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 qua SQLite để cho phép truy cập cơ sở dữ liệu hiệu quả hơn, đồng thời khai thác tối đa sức mạnh của SQLite.

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

Phiên bản androidx.sqlite hiện tại 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 các 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 sử dụng androidx.sqlite:sqlite-framework). Các API này tuân theo chặt chẽ chức năng cốt lõi của API SQLite C.

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 tượng đại diện của đối tượng sqlite3.
  • SQLiteStatement – Là đối tượng đạ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ư các API SQLite C, cách sử dụng phổ biến là:

  • Mở kết nối cơ sở dữ liệu bằng cách sử dụng phương thức triển khai SQLiteDriver tạo bản sao.
  • Chuẩn bị câu lệnh SQL bằng SQLiteConnection.prepare()
  • Thực thi SQLiteStatement bằng cách:
    • Nếu muốn, bạn có thể liên kết 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 phương pháp triển khai trình điều khiển hiện có:

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)

Triển khai được đề xuất sử dụng là BundledSQLiteDriver có trong androidx.sqlite:sqlite-bundled. Phiên bả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 mới nhất và tính nhất quán trên tất cả các nền tảng KMP được hỗ trợ.

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

Các 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 một thư viện có nhiều tính năng cung cấp khả năng truy cập SQLite mạnh mẽ hơn, bạn nên sử dụng Room.

RoomDatabase dựa trên SQLiteDriver để thực hiện các thao tác với cơ sở dữ liệu và bạn phải định cấu hình hoạt động triển khai bằng cách sử dụng RoomDatabase.Builder.setDriver(). Room cung cấp RoomDatabase.useReaderConnectionRoomDatabase.useWriterConnection để truy cập trực tiếp hơn vào các kết nối cơ sở dữ liệu được quản lý.