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

KMM中SQLDelight多表创建与初始化插入问题求助

KMM中SQLDelight无法创建Settings表及初始化数据的解决方案

问题1:创建Settings表

你的Settings表未被创建,核心原因是SQLDelight未识别到新增的建表语句或未更新生成的数据库schema,按以下步骤修复:

  • 确认建表语句正确性:你当前的CREATE TABLE Settings语句语法无误,无需修改。
  • 重新构建项目:SQLDelight依赖代码生成机制,新增表后需执行Build -> Clean Project,再执行Build -> Rebuild Project,触发SQLDelight重新生成包含Settings表的数据库schema。
  • 验证SQLDelight配置:在common模块的build.gradle.kts中确认配置路径正确,示例如下:
sqldelight {
    database("AppDatabase") {
        packageName = "com.yourpackage.db" // 替换为你的实际包名
        // 确保schema目录指向存放.sq文件的路径,默认是src/commonMain/sqldelight
    }
}

问题2:数据库创建时自动插入初始化数据

SQLDelight不会自动执行.sq文件中的INSERT语句,可通过两种方式实现初始化插入:

方式1:利用数据库迁移(推荐)

  1. 在SQLDelight schema目录下创建迁移文件夹,例如src/commonMain/sqldelight/com/yourpackage/db/AppDatabase/migrations
  2. 创建对应版本的迁移文件(如1.sq),写入建表和插入语句:
CREATE TABLE Settings (
version TEXT NOT NULL
);

INSERT INTO Settings(version) VALUES ('1.0.0');
  1. 在build.gradle.kts中配置迁移目录:
sqldelight {
    database("AppDatabase") {
        packageName = "com.yourpackage.db"
        migrationDirectory = file("src/commonMain/sqldelight/com/yourpackage/db/AppDatabase/migrations")
    }
}

数据库初始化时会自动执行该迁移脚本,完成表创建与数据插入。

方式2:数据库初始化后手动执行插入

  1. 在AppDatabase.sq中新增插入语句定义:
insertSettings:
INSERT INTO Settings(version) VALUES (?);
  1. 在数据库创建逻辑中,检查Settings表是否已有数据,若无则执行插入:
val database = AppDatabase(driver)
// 查询是否存在版本数据
val existingVersion = database.getVersion().executeAsOneOrNull()
if (existingVersion == null) {
    database.transaction {
        database.insertSettings("1.0.0")
    }
}

内容的提问来源于stack exchange,提问作者LiTTle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:05:47