SQLite (Kotlin Multiplatform)

הספרייה androidx.sqlite כוללת ממשקים מופשטים וגם ממשקים בסיסיים שבהם אפשר להשתמש כדי ליצור ספריות משלכם, SQLite. מומלץ להשתמש בספרייה חדר, שמציעה בשכבת הפשטה של SQLite כדי לאפשר גישה יעילה יותר למסדי נתונים שמנצלים את מלוא העוצמה של SQLite.

הגדרת יחסי תלות

הגרסה הנוכחית של androidx.sqlite שתומכת ב-Kotlin Multi-Platform (KMP) היא 2.5.0-alpha01 ומעלה.

כדי להגדיר את SQLite בפרויקט KMP, צריך להוסיף את יחסי התלות של ארטיפקטים בקובץ build.gradle.kts של המודול:

  • androidx.sqlite:sqlite – ממשקי ה-SQLite Drive
  • androidx.sqlite:sqlite-bundled – ההטמעה של מנהל ההתקן בחבילה

ממשקי API למנהלי התקנים של SQLite

קבוצות הספריות androidx.sqlite מציעות ממשקי API ברמה נמוכה לתקשורת עם או ספריית SQLite שכלולה בספרייה כשמשתמשים androidx.sqlite:sqlite-bundled או בפלטפורמה המארחת, כמו Android או iOS כשמשתמשים ב-androidx.sqlite:sqlite-framework. ממשקי ה-API פועלים כמעט לפי הליבה של SQLite C API.

יש 3 ממשקים עיקריים:

  • SQLiteDriver – נקודת הכניסה לשימוש ב-SQLite, והיא אחראית לפתיחת חיבורים למסד נתונים.
  • SQLiteConnection – הוא הייצוג של האובייקט sqlite3.
  • SQLiteStatement – הוא הייצוג של האובייקט sqlite3_stmt.

בדוגמה הבאה מוצגים ממשקי ה-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()
}

בדומה לממשקי API של SQLite C, השימוש הנפוץ הוא:

  • פתיחת חיבור למסד נתונים באמצעות SQLiteDriver יישום בפועל.
  • הכנת הצהרת SQL באמצעות SQLiteConnection.prepare()
  • כדי להפעיל SQLiteStatement:
    • אפשר לקשר בין ארגומנטים באמצעות הפונקציות bind*().
    • מתבצע איטרציה מעל קבוצת התוצאות באמצעות הפונקציה step().
    • קריאת עמודות מקבוצת התוצאות באמצעות הפונקציות get*().

הטמעות של מנהלי התקנים

הטבלה הבאה מסכמת את ההטמעות הזמינות של מנהלי התקנים:

שם הכיתה

פריט מידע שנוצר בתהליך פיתוח (Artifact)

פלטפורמות נתמכות

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

ממשקי ה-API של מנהלי ההתקנים שימושיים לאינטראקציות ברמה נמוכה עם מסד נתונים של SQLite. לספרייה עשירה בתכונות שמספקות גישה יעילה יותר ל-SQLite, מומלץ להזמין חדר.

RoomDatabase מסתמך על SQLiteDriver כדי לבצע פעולות במסד הנתונים וצריך להגדיר הטמעה באמצעות RoomDatabase.Builder.setDriver(). החדר כולל RoomDatabase.useReaderConnection ו- RoomDatabase.useWriterConnection לגישה ישירה יותר חיבורים למסד הנתונים.