是否将通过JDBC检索的java.sql.Date值转换为java.time.LocalDate?
我正在尝试使用UCanAccess从Microsoft Access数据库检索日期信息。我需要把它放在tableview的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
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());