是否将通过JDBC检索的java.sql.Date值转换为java.time.LocalDate?

是否将通过JDBC检索的java.sql.Date值转换为java.time.LocalDate?,java,date,jdbc,java-8,ucanaccess,Java,Date,Jdbc,Java 8,Ucanaccess,我正在尝试使用UCanAccess从Microsoft Access数据库检索日期信息。我需要把它放在tableview的LocalDate列中,我正在这样做 Date date = res.getDate(3); LocalDate dateEchantillonnage = LocalDate.parse( new SimpleDateFormat("yyyy-MM-dd").format(date) ); 但这给我带来了两个问题: 第一个是它给出了一个NullPointerExcepti

我正在尝试使用UCanAccess从Microsoft Access数据库检索日期信息。我需要把它放在tableview的LocalDate列中,我正在这样做

Date date = res.getDate(3);
LocalDate dateEchantillonnage = LocalDate.parse( new SimpleDateFormat("yyyy-MM-dd").format(date) );
但这给我带来了两个问题:

第一个是它给出了一个NullPointerException,因为有时候日期可能是空的,所以我想知道是否有办法解决这个问题

第二个是当我替换

Date date = res.getDate(3);
LocalDate dateEchantillonnage = LocalDate.parse( new SimpleDateFormat("yyyy-MM-dd").format(date) );

它始终将日期显示为:1970-01-01

修复NPE:

Date date = res.getDate(3);
LocalDate dateEchantillonnage = date == null
    ? null
    : LocalDate.parse( new SimpleDateFormat("yyyy-MM-dd").format(date) );
确定日期始终为1970-01-01:

Date date = Date.valueOf("2015-07-01"); // You passed an int 2015-07-01 = 2007 :)
LocalDate dateEchantillonnage = date == null
    ? null
    : LocalDate.parse( new SimpleDateFormat("yyyy-MM-dd").format(date) );

以下代码适用于JDK 1.8.0_51下的UCanAccess 3.0.0:

publicstaticvoidmain(字符串[]args){
字符串dbFilePath=“C:/Users/Public/UCanAccessDemo.accdb”;
String connUrl=“jdbc:ucanaccess://”+dbFilePath;
try(Connection conn=DriverManager.getConnection(connUrl)){
String sql=“按ID从日期测试顺序中选择日期1”;
try(语句st=conn.createStatement()){
try(ResultSet rs=st.executeQuery(sql)){
while(rs.next()){
LocalDate DateChantillonnage=null;
试一试{
dateChantillonnage=rs.getDate(1.toLocalDate();
}捕获(NullPointerException npe){
//无所事事
}
System.out.println(dateEchantillonnage);
}
}
}
}捕获(例外e){
e、 printStackTrace(System.err);
}
}
可选的dateChantillonnage=date==null
? 可选。空()
:可选的.of(date.toLocalDate());

这看起来与javafx无关?有关日期到LocalDate的转换,请参见“确定”。我不确定@kleopatra您是否可以检查您的JDBC驱动程序是否支持
java.time
-package:,例如
getObject(idx,LocalDate.class)
的JDBC 4.2转换。但每个司机的支持程度各不相同。@markrottveel-好建议。然而,我只是用UCanAccess 3.0.0进行了尝试,不幸的是它没有起作用<代码>新日期(2015-07-01)与
新日期(2007)
(2015-7-1=2007)相同,后者是纪元后的2007毫秒,或
1970-01-01 00:00:02.007 UTC
Date date = Date.valueOf("2015-07-01"); // You passed an int 2015-07-01 = 2007 :)
LocalDate dateEchantillonnage = date == null
    ? null
    : LocalDate.parse( new SimpleDateFormat("yyyy-MM-dd").format(date) );
Optional<LocalDate> dateEchantillonnage = date == null
    ? Optional.empty()
    : Optional.of(date.toLocalDate());