我正在使用 HSQLDB 2.4.0
, jOOQ 3.7.1
, Scala 2.11.7
, Java 8
.
我想插入一个 java.time.OffsetDateTime
变成一个 TIMESTAMP WITH TIME ZONE
列中的列 HSQLDB
表格:
sql.insertInto(MY_TABLE)
.columns(MY_TABLE.INSERTED_ON)
.values(java.time.OffsetDateTime.now())
.execute()
我得到以下例外:
org.hsqldb.HsqlException: data exception: invalid datetime format
我做错什么了?
2条答案
按热度按时间2q5ifsrm1#
hsqldb只有在按照sql标准格式化时,才能将字符串转换成带时区的时间戳。接受“2020-12-12 21:34:10.769000+2:00”这样的字符串。offsetdatetime的tostring方法的输出略有不同,因此失败。
您应该能够插入正确格式的字符串。
n53p2ov02#
如在https://github.com/jooq/jooq/issues/9174
出于向后兼容性的原因,我们仍然将jsr310类型绑定为大多数方言中的字符串,因为jdbc驱动程序没有立即采用它们。有一个挂起的特性请求传递jsr 310类型而不是字符串:#9902
imho,升级到最新版本的jooq将是最好的选择。
这里也提到了
jooq仍然将值转换为字符串表达式,比如“timestamp with time zone'2019-09-05 15:02:14.5015411+02:00”,而不是将其传递给jdbc驱动程序。
你可以试着插入
OffsetDateTime
格式化为符合指定格式的字符串,然后查看是否有效。