【Compose Multiplatform】手機資料庫SqlDelight實作

前言

在 Compose Multiplatform 專案中
如何實現跨平台的資料庫操作呢?
SqlDelight 提供了一個強大的解決方案
本文將介紹如何在跨平台環境中
使用 SqlDelight 進行資料庫操作

實作步驟
1. 導入 SqlDelight

首先,在專案中導入 SqlDelight:
在 .toml 文件中添加:

在 build.gradle.kts 中添加插件和依賴:

  • 首先加入plugin
  • 接著在各環境下加入對應的lib
  • 最後在kotlin下面加入sqlDelight的配置
    可以理解為在test.your.package.db package下會幫你建立一個AppDatabase的可操作class
2. 實作資料表
  • 在 commonMain/sqldelight/database 目錄下創建 .sq 文件:
    當前版本我實測 需要在上述路徑加入sqldelight folder 然後下一步驟Build時候才會成功產生可操作的class 截圖 2024-07-09 下午3.11.59.png

  • (Optional)可下載同名插件SqlDelight,使其能右鍵產生.sq檔(至Marketplace下載即可)
    參考 sqldelight
    截圖 2024-07-09 下午3.11.59.png
  • 如上所述當上面配置完 加上Build之後
    此路徑/build/generated/sqldelight/code/.. 會產生對應的class

  • 或可以用 cmd來Build
    ./gradlew generateCommonMainAppDatabaseInterface

  • 如果遇到ios build失敗可以把build.gradle.kts的 isStatic改成false
3. 建立各平台實作

為不同平台創建 DatabaseDriverFactory:

4. 實際使用

使用生成的DB class 實作業務邏輯:

5. Koin 注入(Optional)

如果使用 Koin 進行依賴注入
可以這麼做

注意事項
  1. 建議使用 SqlDelight 2.0.1 版本,避免2.0.0版本IOS Build失敗的已知問題
    詳細可看此討論串:點此
  2. 如果遇到 iOS 構建失敗,可以嘗試將 isStatic 設置為 false
    找不到為何要這樣改
    可能是官方的workaround
    官方文件就直接寫出這個方法
總結
  • SqlDelight 提供了強大的跨平台資料庫解決方案
  • 通過適當的封裝,可以在不同平台上統一使用資料庫 API
  • 結合 Koin 等依賴注入框架,可以更好地管理資料庫實例
  • 注意版本選擇和平台特定實現,以確保跨平台兼容性

You might also enjoy