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

SqlDelight迁移遇‘尝试修改非表对象’错误求助

解决SqlDelight迁移校验时ALTER TABLE报错的问题

以下是针对你遇到的Attempting to alter something that is not a table错误的排查和解决步骤:

  • 规范迁移文件的命名与存放路径
    SqlDelight对迁移文件的规则要求严格:

    1. 命名必须遵循[旧版本号]-[新版本号].sqm格式,比如从版本1到2的文件要命名为1-2.sqm
    2. 必须和对应数据库的主schema文件(比如MyDatabase.sq)放在同一目录下,而非和.db文件同目录。举个例子,若你的数据库包路径是com/yourapp/db,迁移文件路径应为src/main/sqldelight/com/yourapp/db/1-2.sqm
  • 核对迁移语句与主schema的一致性
    开启verifyMigration时,SqlDelight会校验迁移后的schema和直接创建新版本schema的结构是否完全匹配。请确认:

    • 迁移语句中的表名MyTable和主schema中定义的表名完全一致(注意部分SQL方言的大小写敏感性)
    • 新增列的定义(类型、默认值等)和主schema中v2版本的列定义完全相同,比如迁移语句的TEXT DEFAULT ""要和主schema里的写法一致
  • 检查SQL语法的正确性
    针对SQLite方言,ALTER TABLE ADD COLUMN的标准写法为:

    ALTER TABLE MyTable ADD COLUMN driverName TEXT DEFAULT '';
    

    排查是否存在拼写错误、符号误用(比如引号类型)等问题。

  • 彻底清理SqlDelight生成文件
    手动删除项目中SqlDelight的生成目录:

    • Android项目:app/build/generated/sqldelight
    • JVM项目:build/generated/sqldelight
      之后执行generateSqlDelightInterface Gradle任务,再重新尝试迁移校验。
  • 统一SqlDelight版本号
    确保Gradle配置中插件版本和依赖版本完全一致,避免版本不兼容导致的校验逻辑异常:

    plugins {
      id("app.cash.sqldelight") version "2.0.0" // 替换为你使用的版本
    }
    
    dependencies {
      implementation("app.cash.sqldelight:sqlite-driver:2.0.0")
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:05:27