【问题标题】:Why is jTDS failing to convert SQL Server datetime to java.sql.Timestamp?为什么 jTDS 无法将 SQL Server 日期时间转换为 java.sql.Timestamp?
【发布时间】:2016-12-22 02:38:00
【问题描述】:

这是我的映射。

@Column(name = "someDateTime") // which is `datetime` in SQL Server table
public java.sql.Timestamp getSomeDateTime() {
    return someDateTime;
}

URL is spring.datasource.url=jdbc:jtds:sqlserver://myUrl:1433/bizproj;socketTimeout=21600

我正在使用 jTDS 1.3.1 和 Hibernate 5.0.9 以及 Spring Boot 1.4 来连接 SQL Server。

我在从 SQL Server 加载内容时遇到以下错误

Caused by: java.sql.SQLException: Value 2009-02-25 07:51:54.2730000 +00:00 cannot be converted to TIMESTAMP.
    at net.sourceforge.jtds.jdbc.Support.convert(Support.java:516) ~[jtds-1.3.1.jar:1.3.1]
    at net.sourceforge.jtds.jdbc.JtdsResultSet.getTimestamp(JtdsResultSet.java:1182) ~[jtds-1.3.1.jar:1.3.1]
    at net.sourceforge.jtds.jdbc.JtdsResultSet.getTimestamp(JtdsResultSet.java:1334) ~[jtds-1.3.1.jar:1.3.1]
    at org.hibernate.type.descriptor.sql.TimestampTypeDescriptor$2.doExtract(TimestampTypeDescriptor.java:76) ~[hibernate-core-5.0.9.Final.jar:5.0.9.Final]
    at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:47) ~[hibernate-core-5.0.9.Final.jar:5.0.9.Final]
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:238) ~[hibernate-core-5.0.9.Final.jar:5.0.9.Final]
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:234) ~[hibernate-core-5.0.9.Final.jar:5.0.9.Final]
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:224) ~[hibernate-core-5.0.9.Final.jar:5.0.9.Final]
    at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:300) ~[hibernate-core-5.0.9.Final.jar:5.0.9.Final]
    at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2727) ~[hibernate-core-5.0.9.Final.jar:5.0.9.Final]
    at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1729) ~[hibernate-core-5.0.9.Final.jar:5.0.9.Final]
    at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1655) ~[hibernate-core-5.0.9.Final.jar:5.0.9.Final]
    at org.hibernate.loader.Loader.getRow(Loader.java:1544) ~[hibernate-core-5.0.9.Final.jar:5.0.9.Final]
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:727) ~[hibernate-core-5.0.9.Final.jar:5.0.9.Final]

数据库中该列和行的值为2009-02-25 07:51:54.273

我可能遗漏了一些东西,但即使经过一番调查,我也无法弄清楚。我尝试使用 joda-time 和 jadira,但异常没有改变。非常感谢任何指导。

【问题讨论】:

    标签: sql-server hibernate jpa jdbc jtds


    【解决方案1】:

    值 2009-02-25 07:51:54.2730000 +00:00 无法转换为 TIMESTAMP。

    注意日期/时间值末尾的时区偏移+00:00。它表明 SQL Server 列几乎可以肯定是 datetimeoffset 类型,而不是您在问题中所述的 datetime

    有关使用 jTDS 处理 datetimeoffset 值的更多信息,请参阅相关问题:

    using the datetimeoffset datatype with jTDS

    【讨论】:

      猜你喜欢
      • 2011-09-01
      • 1970-01-01
      • 2019-03-07
      • 2019-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-05
      • 1970-01-01
      相关资源
      最近更新 更多