SQLDelight 不支持布尔值

Boolean value is not supported in SQLDelight

提问人:Saeed Noshadi 提问时间:11/18/2023 更新时间:11/18/2023 访问量:27

问:

我想在SQLDelight中保存一个布尔值,但是当我运行应用程序时,我从导入布尔值中收到此错误:“未解析的引用:布尔值”。我该如何解决? 我使用 SQLDelight = 2.0.0

这是我共享的模块gradle:

plugins {
    alias(libs.plugins.kotlinMultiplatform)
    alias(libs.plugins.androidLibrary)
    alias(libs.plugins.serializationPlugin)
    alias(libs.plugins.sqlDelightPlugin)
}

kotlin {
    iosX64()
    iosArm64()
    iosSimulatorArm64()

    androidTarget {
        compilations.all {
            kotlinOptions {
                jvmTarget = "1.8"
            }
        }
    }

    jvm()

    sourceSets {
        commonMain.dependencies {
            implementation(libs.coroutines)
//            implementation(libs.ktor.server.core)
//            implementation(libs.ktor.server.tests)
            implementation(libs.ktor.client.core)
            implementation(libs.ktor.client.content.negotiation)
            implementation(libs.ktor.serialization)
            implementation(libs.dateTime)
        }

        androidMain.dependencies {
            implementation(libs.sqlDelight.android.driver)
        }
        iosMain.dependencies {
            implementation(libs.sqlDelight.native.driver)
        }
    }
}
sqldelight {
    databases {
        create("AppDatabase") {
            packageName.set("org.sn.spacexkmp.shared.cache")
        }
    }
}
android {
    namespace = "org.sn.spacexkmp.shared"
    compileSdk = libs.versions.android.compileSdk.get().toInt()
    defaultConfig {
        minSdk = libs.versions.android.minSdk.get().toInt()
    }
}

这是我的 Query sq 文件:

CREATE TABLE Launch (
    flightNumber INTEGER NOT NULL,
    missionName TEXT NOT NULL,
    details TEXT,
    launchSuccess INTEGER AS Boolean DEFAULT NULL,
    launchDateUTC TEXT NOT NULL,
    patchUrlSmall TEXT,
    patchUrlLarge TEXT,
    articleUrl TEXT
);

insertLaunch:
INSERT INTO Launch(flightNumber, missionName, details, launchSuccess, launchDateUTC, patchUrlSmall, patchUrlLarge, articleUrl)
VALUES(?, ?, ?, ?, ?, ?, ?, ?);

removeAllLaunches:
DELETE FROM Launch;

selectAllLaunchesInfo:
SELECT * FROM Launch;

例如,如果我将此值更改为 INTEGER,则错误已修复 launchSuccess INTEGER AS Boolean DEFAULT NULL,

Android Kotlin android-jetpack-compose kotlin-multiplatform

评论


答:

1赞 Murtaza 11/18/2023 #1

我们在整数类型中没有 NULL 值,而不是使用 0 作为默认值。

https://cashapp.github.io/sqldelight/1.5.4/js_sqlite/types/

CREATE TABLE Launch (
    flightNumber INTEGER NOT NULL,
    missionName TEXT NOT NULL,
    details TEXT,
    launchSuccess INTEGER AS Boolean DEFAULT 0,
    launchDateUTC TEXT NOT NULL,
    patchUrlSmall TEXT,
    patchUrlLarge TEXT,
    articleUrl TEXT
);

评论

0赞 Saeed Noshadi 11/18/2023
不工作。错误来自 SQLDelight 生成的 DatabaseQueries 和生成的 DataModel 类
0赞 Murtaza 11/18/2023
尝试使用Sqlite,既简单又精彩