使用 JOOQ 更新 SQLITE 中的表行失败
Posted
技术标签:
【中文标题】使用 JOOQ 更新 SQLITE 中的表行失败【英文标题】:Failed To Update Table Row in SQLITE Using JOOQ 【发布时间】:2019-01-06 13:43:10 【问题描述】:jooq 正在为 sqlite 数据库生成无效的更新语句。
这是数据库表。
CREATE TABLE "job" (
`id` integer PRIMARY KEY AUTOINCREMENT,
`addressId` text,
`log` text
)
有效声明:
update "job" set "log" = (coalesce("log", ?) || ? || ?) WHERE id > 0
Jooq 生成的语句
update "job" set "job"."log" = (coalesce("job"."log", ?) || ? || ?) where "job"."id" >= ?
这是我正在使用的示例代码:
DSL.using(configuration).update(JOB).set(JOB.LOG, DSL.coalesce(JOB.LOG, "")
.concat("char(10)", "Hello"))
.where(JOB.ID.ge(0)).execute()
如何强制 jooq 生成有效的 sqlite 更新语句?
【问题讨论】:
您是否正确设置了configuration
和SQLDialect.SQLITE
?另外,你为什么给JOB
表起别名?
是的,我配置了相同的方言。能够成功查询数据库但更新失败。我忘记删除别名了,现在更新了。
我无法重现这个。使用正确配置的配置,SQLite 的更新语句中没有列限定,也没有引用列。您能否展示一下您是如何创建configuration
的?
感谢 Lukas Eder 抽出宝贵时间,不幸的是,由于某种原因,这是一个 IDE 问题,在我添加 SQLDialect.SQLITE 的位置没有刷新文件。在将 DIALECT 打印到控制台后,我知道了这一点。
【参考方案1】:
对此最可能的解释是您没有使用SQLDialect.SQLITE
方言正确配置您的configuration
。在该方言中,set
子句中的列引用不会被限定,任何列或表也不会被引用。
【讨论】:
我昨天在您发表评论后重新检查过,但没有明确调试问题。以上是关于使用 JOOQ 更新 SQLITE 中的表行失败的主要内容,如果未能解决你的问题,请参考以下文章
使用 JOOQ 更新 PostgreSQL 中的 jsonb 值