如何解决:java.sql.SQLException:setDate,Exception =年份值无效

时间:2015-11-26 16:06:20

标签: 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();

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

  

java.sql.SQLException:setDate,Exception =年份值无效

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

为什么?如何在java中检查sql的年份验证,即使它在java中有效吗?

我应该在查询前检查java中的年份吗?哪个年份对java.sql有效?

1 个答案:

答案 0 :(得分:1)

在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的偏移量。