【Compose Multiplatform】手機資料庫SqlDelight實作
2024, Jul 10
前言
在 Compose Multiplatform 專案中
如何實現跨平台的資料庫操作呢?
SqlDelight 提供了一個強大的解決方案
本文將介紹如何在跨平台環境中
使用 SqlDelight 進行資料庫操作
目錄
- 【Compose Multiplatform】專案轉移探討與開發指南
- 【Compose Multiplatform】手機使用依賴注入Koin
- 【Compose Multiplatform 】跨平台App但Android需要context作法並搭配Koin
- 【Compose Multiplatform】手機本地持久化儲存DataStore實作
- 【Compose Multiplatform】手機資料庫SqlDelight實作
- 【Compose Multiplatform】CMP中使用ROOM開發資料庫 - [KSP2] Annotation value is missing in nested annotations
- 【Compose Multiplatform】CMP專案中導入CocoaPods及無CocoaPods情況下使用IOS Swift/Obj-C
實作步驟
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下載即可)
參考 sqldelight
- 如上所述當上面配置完 加上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 等依賴注入框架,可以更好地管理資料庫實例
- 注意版本選擇和平台特定實現,以確保跨平台兼容性