java - 如何解决 : java. sql.SQLException : setDate, 异常 = 无效的年份值

标签 java date jpa sqlexception

我有一个简单的 TypedQuery,它从我的数据库中选择数据:

TypedQuery<MyTable> query = entityManager.createQuery("select t from MyTable t where t.valueDate between :fromDate and :toDate ", MyTable.class);
query.setParameter("fromDate", fromDate, TemporalType.DATE);
query.setParameter("toDate", toDate, TemporalType.DATE);
List<MyTable> resultList = query.getResultList();

fromDatetoDate 来自后台。有时我会得到这个日期:0123-12-27T00:00:00.000+01:00。该日期在我的 java 应用程序中有效。但是当我想在查询中使用这个日期时,它会抛出异常:

java.sql.SQLException: setDate, Exception = Invalid year value

因此java.sql无法设置日期,因为年份是0123

这是为什么呢?如何在java中检查sql中年份的有效性,即使它在java中有效?

我应该在查询之前检查java中的年份吗? java.sql 的有效日期是从哪一年开始?

最佳答案

在 Java 8 及更高版本中,java.sql.Date类有一个新的valueOf(LocalDate date)方法。您可以使用它来创建一个包含日期字符串 0123-12-27T00:00:00.000+01:00 和以下代码片段的 SQL 日期对象。

import java.time.OffsetDateTime;

public class SQLDateTest {
    public static void main(String[] args){
        Date d = java.sql.Date.valueOf(OffsetDateTime.parse("0123-12-27T00:00:00.000+01:00").toLocalDate());
        System.out.println(d);
    }
}

java.sql.Date 打印为 0123-12-27。请注意,不考虑与 UTC 的偏移。

关于java - 如何解决 : java. sql.SQLException : setDate, 异常 = 无效的年份值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33942880/

相关文章:

java - 代号一 - Web 服务不支持外部化对象

java - keycloak中不同领域的SSo

javascript - 计算日期差异,获取小时、分钟和秒的差异 - 最好通过 js,否则 moment.js

jpa - 如何为 EclipseLink 正确设置 SQL 日志记录?

java - EclipseLink - 向 Postgres 添加索引

java - 如何解决 wsdl2java 上 ObjectFactory 中的冲突?

java - 将列表的元素分组为子列表(可能使用 Guava )

javascript - 关于javascript中日期函数的问题

javascript - 这是 Date.js 中的错误吗?

hibernate - JPA实体关系: Cascade on delete