Jetpack Compose Desktop数据库库选型及SqlDelight配置资源求助
Jetpack Compose Desktop 数据库方案:SqlDelight 完整配置指南
背景说明
Room目前确实无法在Jetpack Compose Desktop中使用,因为它依赖Android专属的架构组件,没有JVM端实现。SqlDelight是当前最适合的替代方案,下面是完整的配置和使用步骤:
1. 项目级 Gradle 配置(Kotlin DSL)
在项目根目录的 build.gradle.kts 中添加SqlDelight插件:
plugins { // 保留你已有的插件(如org.jetbrains.compose) id("app.cash.sqldelight") version "2.0.1" // 建议使用Maven Central上的最新稳定版 } repositories { mavenCentral() // 其他仓库(如compose官方仓库) }
2. 模块级 Gradle 配置
在你的Desktop模块(通常是desktop模块)的build.gradle.kts中添加依赖和数据库配置:
dependencies { // SqlDelight 核心SQLite驱动 implementation("app.cash.sqldelight:sqlite-driver:2.0.1") // 协程扩展(可选,支持异步数据库操作) implementation("app.cash.sqldelight:coroutines-extensions-jvm:2.0.1") } sqldelight { databases { create("AppDatabase") { packageName.set("com.your.app.db") // 替换成你的实际包名 } } }
3. 编写数据库 Schema
在模块的src/main/sqldelight下,按照你设置的包名创建对应目录(比如com/your/app/db),然后新建.sq文件(如User.sq),定义表结构和SQL操作:
-- 创建用户表 CREATE TABLE IF NOT EXISTS User ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT NOT NULL, avatar_url TEXT ); -- 插入用户的SQL语句 insertUser: INSERT INTO User (username, avatar_url) VALUES (?, ?); -- 查询所有用户 getAllUsers: SELECT * FROM User;
4. 生成代码并在Compose中使用
同步Gradle后,SqlDelight会自动生成对应的数据库操作类。在Compose Desktop代码中初始化并使用:
import app.cash.sqldelight.db.SqlDriver import app.cash.sqldelight.driver.sqlite.JdbcSqliteDriver import com.your.app.db.AppDatabase // 初始化数据库 // 内存数据库(重启即丢失数据):JdbcSqliteDriver.IN_MEMORY // 持久化数据库:指定磁盘路径,如 "jdbc:sqlite:./my_app.db" val driver: SqlDriver = JdbcSqliteDriver("jdbc:sqlite:./my_app.db") AppDatabase.Schema.create(driver) // 创建表结构 val db = AppDatabase(driver) // 示例:插入数据 db.userQueries.insertUser("JohnDoe", "https://example.com/avatar.jpg") // 示例:查询数据 val users = db.userQueries.getAllUsers().executeAsList() users.forEach { println("用户:${it.username}") }
注意事项
- 持久化数据库路径:在Desktop环境下,
./my_app.db会保存在应用的运行目录下,若需固定存储位置,可使用绝对路径 - 版本迁移:修改Schema后,可通过编写迁移SQL脚本实现数据库版本更新,SqlDelight支持定义版本变更的逻辑
内容的提问来源于stack exchange,提问作者Jaz
相关产品推荐
相关产品推荐

