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

SQLDelight 2.0.0保存布尔值报错‘Unresolved reference: Boolean’的解决方法

解决SQLDelight 2.0.0中布尔值类型映射的"Unresolved reference: Boolean"错误

问题原因

SQLDelight 2.0.0默认未内置布尔类型的数据库与Kotlin类型转换器,直接在SQL语句中使用INTEGER AS Boolean时,生成的Kotlin代码无法识别Boolean类型,导致编译错误。

解决方案

方法一:使用官方Primitive Adapters依赖(推荐)

  1. 添加依赖
    在共享模块的commonMain依赖块中引入SQLDelight的primitive-adapters库,该库提供了布尔、字节等基础类型的现成转换器:

    sourceSets {
        commonMain.dependencies {
            // 其他已有依赖...
            implementation(libs.sqlDelight.primitive.adapters)
        }
    }
    

    如果使用libs.versions.toml管理版本,需要先在文件中添加依赖定义:

    [versions]
    sqlDelight = "2.0.0"
    
    [libraries]
    sqlDelight-primitive-adapters = { module = "app.cash.sqldelight:primitive-adapters", version.ref = "sqlDelight" }
    
  2. 同步并构建项目
    执行Gradle同步,重新构建项目后,SQLDelight就能正确识别INTEGER AS Boolean的类型映射,自动生成将数据库INTEGER值转换为Kotlin Boolean的代码(0对应false,非0对应true,null保持为null)。

方法二:自定义布尔类型转换器

如果不想引入额外依赖,可以手动实现类型转换器:

  1. 创建转换器类
    在commonMain源码目录下创建布尔类型适配器:

    package org.sn.spacexkmp.shared.cache
    
    import app.cash.sqldelight.ColumnAdapter
    
    object BooleanAdapter : ColumnAdapter<Boolean?, Int?> {
        override fun decode(databaseValue: Int?): Boolean? {
            return databaseValue?.let { it != 0 }
        }
    
        override fun encode(value: Boolean?): Int? {
            return value?.let { if (it) 1 else 0 }
        }
    }
    
  2. 配置SQLDelight使用转换器
    在Gradle的SQLDelight配置中指定该适配器:

    sqldelight {
        databases {
            create("AppDatabase") {
                packageName.set("org.sn.spacexkmp.shared.cache")
                addAdapters.set(listOf("org.sn.spacexkmp.shared.cache.BooleanAdapter"))
            }
        }
    }
    
  3. 重新构建项目
    同步Gradle并构建,即可解决类型引用错误。

验证

保持SQL语句中的launchSuccess INTEGER AS Boolean DEFAULT NULL写法不变,构建后生成的Launch数据类中launchSuccess字段会被正确定义为Boolean?类型,可直接在Kotlin代码中使用布尔值进行数据库读写操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 04:00:58