[英]How to insert TIMESTAMP WITH TIME ZONE into HSQLDB using JOOQ
我正在使用HSQLDB 2.4.0
, jOOQ 3.7.1
, Scala 2.11.7
, Java 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.