我的 sqldelight gradle 块中有两个数据库设置:
sqldelight {
databases {
create("Database") {
packageName.set("dev.db")
}
create("OtherDatabase") {
packageName.set("dev.db2")
}
}
}
构建后,sqldelight 出错,没有生成 /build/sqldelight 文件夹。
有一个生成 2 个文件的正确方法:
same Table Name
same DB file name
same Package name
成功了吗?
因为我需要上述要求中的
config 2 different Column_Id
。
例如:文件夹平台
/android
需要Column_ID A,&“/ios”需要Column_ID B。(实际上我需要解决它)
> Task :shared:generateCommonMainDatabaseInterface FAILED
使用方言编译 app.cash.sqldelight.dialects.sqlite_3_18.SqliteDialect
/shared/src/commonMain/sqldelight/dev/db/Tables.sq: (1, 13): 已使用名称 user 1 CREATE TABLE user( ^^^^ 2 id 整数主键,3 名称文本 4 )
/shared/src/commonMain/sqldelight/dev/db2/Tables.sq:(1, 13): 已使用名称 user 1 CREATE TABLE user 定义表( ^^^^ 2 id 整数主键,3 名称文本 4 )
失败:构建已完成,但有 2 次失败。
执行app.cash.sqldelight.gradle.SqlDelightTask$GenerateInterfaces时发生故障 生成失败;有关详细信息,请参阅生成器错误输出。
执行app.cash.sqldelight.gradle.SqlDelightTask$GenerateInterfaces时发生故障 生成失败;有关详细信息,请参阅生成器错误输出。
3秒内构建失败 2 个可操作的任务:已执行 2 个
build.gradle
文件:
sqldelight {
databases {
create("Database") {
packageName.set("dev.db")
}
create("OtherDatabase") {
packageName.set("dev.db2")
}
}
}
*.sq
文件:
CREATE TABLE IF NOT EXISTS user(
_ID INTEGER PRIMARY KEY AUTOINCREMENT,
CATEGORY_ID INTEGER NOT NULL UNIQUE,
);
Build System
:
SQLDelight版本 2.0.2
Gradle 版本 8.9
Kotlin 版本 2.0.20
方言 SQLite
如果:
因为我需要在上述要求中配置2个不同的Column_Id。
例如:文件夹平台/android需要Column_ID A,&“/ios”需要 Column_ID B.(实际上我需要解决它)
correct way
生成2个文件:
相同的表名
相同的数据库文件名
相同的包名
不同的ColumnId
解决方案1简单的方法
要解决问题:
different ColumnId
中的DB file
对于different platform
:android/iOs
尝试使用
"Rename Column" SQL query
方式,改为same ColumnId
(
android side
或 iOs side
,使用 DB Migration
SQL 查询运行 rename
)
解决方案2进阶方式
在
KMP
根项目,必须创建 2 /module
:
/iOsDbMobule
& /androidDbModule
照常定义这些文件夹:
/iosMain
、/commonMain
配置/设置
sqlDelight to generate A.db
(包括ColumnId AA
)
照常定义这些文件夹:
/androidMain
、/commonMain
配置/设置
sqlDelight to generate A.db
(包括ColumnId BB
)
构建(运行配置)后,您可以重新检查其是否有效。
因此,要验证它是否有效?
在
Native project
,
iOs side
:从*.xcframework
导入KMP prj
,它将模拟到相应的类/数据库文件(带有columId AA)
android side
:从*.aar
导入KMP prj
,它将模拟到相应的类/数据库文件(带有columId BB)