【Compose Multiplatform】手機資料庫SqlDelight實作
3 min read
CrossPlatform#CMP#Kotlin#SqlDelight
前言
在 Compose Multiplatform 專案中
如何實現跨平台的資料庫操作呢?
SqlDelight 提供了一個強大的解決方案
本文將介紹如何在跨平台環境中
使用 SqlDelight 進行資料庫操作
{% include table/compose-multiplatform-category.html %}
實作步驟
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
- (Optional)可下載同名插件
SqlDelight
,使其能右鍵產生.sq檔(至Marketplace下載即可)
-
如上所述當上面配置完 加上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 進行依賴注入
可以這麼做
注意事項
- 建議使用 SqlDelight 2.0.1 版本,避免2.0.0版本IOS Build失敗的已知問題
詳細可看此討論串:點此
- 如果遇到 iOS 構建失敗,可以嘗試將 isStatic 設置為 false
找不到為何要這樣改
可能是官方的workaround
官方文件就直接寫出這個方法
總結
- SqlDelight 提供了強大的跨平台資料庫解決方案
- 通過適當的封裝,可以在不同平台上統一使用資料庫 API
- 結合 Koin 等依賴注入框架,可以更好地管理資料庫實例
- 注意版本選擇和平台特定實現,以確保跨平台兼容性