【发布时间】:2020-06-07 13:43:39
【问题描述】:
我们正在尝试执行基于 ZonedDateTime 删除记录的 dml。我们正在使用以下代码,但遇到了错误。
dsl.execute ("delete from fieldhistory where createddate <= ? and object = ?", beforeDate.toOffsetDateTime(), objName)
beforeDate 是 ZonedDateTime,objectName 是字符串
我们从 postgres 收到以下错误。
org.jooq.exception.DataAccessException: SQL [delete from fieldhistory where createddate <= ? and object = ?]; ERROR: operator does not exist: timestamp with time zone <= character varying
Hint: No operator matches the given name and argument types. You might need to add explicit type casts.
Position: 56
at org.jooq_3.13.1.POSTGRES.debug(Unknown Source)
at org.jooq.impl.Tools.translate(Tools.java:2751)
at org.jooq.impl.DefaultExecuteContext.sqlException(DefaultExecuteContext.java:755)
at org.jooq.impl.AbstractQuery.execute(AbstractQuery.java:385)
at org.jooq.impl.DefaultDSLContext.execute(DefaultDSLContext.java:1144)
问题是,我们如何在 Jooq 中绑定 datetime 值?
【问题讨论】:
-
遇到此问题的另一种方式是在查询
OffsetDateTime字段时。这种情况下的错误消息是java.lang.IllegalArgumentException: Cannot decode value of type java.lang.String with OID 1184。修复方法是相同的:将bindOffsetDateTimeType设置为true- 请参阅Lukas Eder's answer below,尤其是the linked GitHub issue。
标签: jooq sqlbindparameter