Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解决:java.sql.SQLException:setDate,Exception=无效的年份值_Java_Date_Jpa_Sqlexception - Fatal编程技术网

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

如何解决:java.sql.SQLException:setDate,Exception=无效的年份值,java,date,jpa,sqlexception,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

我有一个简单的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();
TypedQuery query=entityManager.createQuery(“从MyTable t中选择t,其中t.valueDate介于:fromDate和:toDate之间”,MyTable.class);
setParameter(“fromDate”,fromDate,TemporalType.DATE);
setParameter(“toDate”,toDate,TemporalType.DATE);
List resultList=query.getResultList();
fromDatetoDate来自背景。有时我会得到这样的日期:0123-12-27T00:00:00.000+01:00。此日期在我的java应用程序中有效。但当我想在查询中使用此日期时,它将抛出一个异常:

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

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

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

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

在java 8及更高版本中,类有一个新方法。您可以使用它创建一个sql日期对象,其中包含日期字符串0123-12-27T00:00:00.000+01:00和以下代码段

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

为什么不读取该类的javadoc(java.sql.Date)??可能的重复项不能互换使用java.util.Date和java.sql.Date。您要么必须在应用程序中使用java.sql.Date,并将其作为fromDate和toDate传递给查询,要么需要在两者之间进行转换,这将有自己的问题集。