![](/img/trans.png)
[英]When I insert a date in Jooq, I get this error: column creation_date is of type timestamp with time zone but expression is of type character varying
[英]Error binding OffsetDateTime [operator does not exist: timestamp with time zone <= character varying]
我們正在嘗試執行基於 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 中綁定日期時間值?
由於歷史原因,jOOQ 將所有 JSR-310 次綁定為字符串,而不是相關的對象類型。 這是因為直到最近,JDBC 驅動程序本身都不支持 JSR-310 類型,因此,使用字符串並不是一個糟糕的默認設置。
不幸的是,這會導致類型歧義,如果出現以下情況,您將不會有這種歧義:
作為解決方法,您可以執行以下操作,包括:
顯式轉換綁定變量
dsl.execute("delete from fieldhistory where createddate <= ?::timestamptz and object = ?",
beforeDate.toOffsetDateTime(),
objName)
使用 DSL API
dsl.deleteFrom(FIELDHISTORY)
.where(FIELDHISTORY.CREATEDDATE.lt(beforeDate.toOffsetDateTime()))
.and(FIELDHISTORY.OBJECT.eq(objName))
.execute();
通過編寫自己的綁定
您可以編寫自己的數據類型綁定並將其附加到生成的代碼或普通 SQL 查詢中,在這種情況下,您可以控制如何將綁定變量發送到 JDBC 驅動程序。 請參閱: https : //www.jooq.org/doc/latest/manual/sql-building/queryparts/custom-bindings/
例如:
DataType<OffsetDateTime> myType = SQLDataType.OFFSETDATETIME
.asConvertedDataType(new MyBinding());
dsl.execute ("delete from fieldhistory where createddate <= {0} and object = {1}",
val(beforeDate.toOffsetDateTime(), myType),
val(objName))
將來會對此進行修復,因此不再需要這樣做: https : //github.com/jOOQ/jOOQ/issues/9902
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.