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

时间:2015-08-05 09:02:38

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

但它给我带来两个问题:

第一个是它给出了NullPointerException,因为有时日期可以为null,所以我想知道是否有办法对此进行补救。

第二个是我替换

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

Date date = new Date(2015-07-01);
LocalDate dateEchantillonnage = LocalDate.parse( new SimpleDateFormat("yyyy-MM-dd").format(date) );

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

3 个答案:

答案 0 :(得分:1)

Optional<LocalDate> dateEchantillonnage = date == null
    ? Optional.empty()
    : Optional.of(date.toLocalDate());

答案 1 :(得分:0)

修复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) );

答案 2 :(得分:0)

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

public static void main(String[] args) {
    String dbFilePath = "C:/Users/Public/UCanAccessDemo.accdb";
    String connUrl = "jdbc:ucanaccess://" + dbFilePath;
    try (Connection conn = DriverManager.getConnection(connUrl)) {
        String sql = "SELECT Date1 FROM DateTest ORDER BY ID";
        try (Statement st = conn.createStatement()) {
            try (ResultSet rs = st.executeQuery(sql)) {
                while (rs.next()) {
                    LocalDate dateEchantillonnage = null;
                    try {
                        dateEchantillonnage = rs.getDate(1).toLocalDate();
                    } catch (NullPointerException npe) {
                        // do nothing
                    }
                    System.out.println(dateEchantillonnage);
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace(System.err);
    }
}