【问题标题】:Failed To Update Table Row in SQLITE Using JOOQ使用 JOOQ 更新 SQLITE 中的表行失败
【发布时间】: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 更新语句?

【问题讨论】:

  • 您是否正确设置了configurationSQLDialect.SQLITE?另外,你为什么给JOB 表起别名?
  • 是的,我配置了相同的方言。能够成功查询数据库但更新失败。我忘记删除别名了,现在更新了。
  • 我无法重现这个。使用正确配置的配置,SQLite 的更新语句中没有列限定,也没有引用列。您能否展示一下您是如何创建configuration 的?
  • 感谢 Lukas Eder 抽出宝贵时间,不幸的是,由于某种原因,这是一个 IDE 问题,在我添加 SQLDialect.SQLITE 的位置没有刷新文件。在将 DIALECT 打印到控制台后,我知道了这一点。

标签: sqlite kotlin jooq


【解决方案1】:

对此最可能的解释是您没有使用SQLDialect.SQLITE 方言正确配置您的configuration。在该方言中,set 子句中的列引用不会被限定,任何列或表也不会被引用。

【讨论】:

  • 我昨天在您发表评论后重新检查过,但没有明确调试问题。
猜你喜欢
  • 1970-01-01
  • 2019-06-05
  • 1970-01-01
  • 2017-06-29
  • 2019-01-25
  • 1970-01-01
  • 2015-05-31
  • 2021-03-15
  • 1970-01-01
相关资源
最近更新 更多