You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 00:52:53