簡體   English   中英

如何使用 JOOQ 將 TIMESTAMP WITH TIME ZONE 插入 HSQLDB

[英]How to insert TIMESTAMP WITH TIME ZONE into HSQLDB using JOOQ

我正在使用HSQLDB 2.4.0jOOQ 3.7.1Scala 2.11.7Java 8

我正在嘗試將java.time.OffsetDateTime插入HSQLDB表中的TIMESTAMP WITH TIME ZONE列:

sql.insertInto(MY_TABLE)
    .columns(MY_TABLE.INSERTED_ON)
    .values(java.time.OffsetDateTime.now())
    .execute()

我收到以下異常:

org.hsqldb.HsqlException: data exception: invalid datetime format

我究竟做錯了什么?

https://github.com/jOOQ/jOOQ/issues/9174所述

出於向后兼容性的原因,我們仍在大多數方言中將 JSR 310 類型綁定為字符串,因為 JDBC 驅動程序尚未立即采用它們。 有一個待處理的功能請求來傳遞 JSR 310 類型而不是字符串: #9902

恕我直言,升級到最新版本的 jOOQ 將是最好的選擇。

那里也提到了

jOOQ 仍然將該值轉換為字符串表達式,例如“timestamp with time zone '2019-09-05 15:02:14.5015411+02:00'”,而不是將其傳遞給 JDBC 驅動程序。

您可以嘗試將格式化的OffsetDateTime插入符合指定格式的字符串中,看看是否有效。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss.nXXX");
String formatted = OffsetDateTime.now().format(formatter);
sql.insertInto(MY_TABLE)
    .columns(MY_TABLE.INSERTED_ON)
    .values(formatted)
    .execute()

只有按照 SQL 標准格式化時,HSQLDB 才能將字符串轉換為 TIMESTAMP WITH TIME ZONE。 接受諸如“2020-12-12 21:34:10.769000+2:00”之類的字符串。 OffsetDateTime 的 toString 方法的 output 略有不同,失敗。

您應該能夠插入格式正確的字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM