这是因为Oracle数据库中的DATE数据类型包含日期和时间信息,而LocalDate只包含日期信息。当将LocalDate插入到DATE类型的列中时,Oracle会自动将时间部分设置为12:00:00。

要解决这个问题,可以使用to_date函数将LocalDate转换为DATE类型,并将时间部分设置为00:00:00。例如:

LocalDate localDate = LocalDate.of(2016, 5, 8);
Date date = Date.valueOf(localDate); // 转换为java.util.Date类型
PreparedStatement ps = connection.prepareStatement("INSERT INTO table_name (date_column) VALUES (to_date(?, 'YYYY-MM-DD HH24:MI:SS'))");
ps.setString(1, date.toString() + " 00:00:00");
ps.executeUpdate();

这样插入到Oracle数据库中的时间部分就会被设置为00:00:00,只保留日期部分。

另外,当从数据库中获取日期时,可以使用LocalDate的valueOf方法将java.util.Date类型转换为LocalDate类型。例如:

ResultSet rs = statement.executeQuery("SELECT date_column FROM table_name");
while (rs.next()) {
    Date date = rs.getDate(1);
    LocalDate localDate = LocalDate.ofInstant(date.toInstant(), ZoneId.systemDefault());
    System.out.println(localDate);
}

这样可以获取到只包含日期信息的LocalDate对象

java中 LocalDate 是2016-05-08 但是插入oracle变成了2016-05-08 120000 而不是 2016-05-08怎么解决? 1localDateTime 与 date类型在插入没有这个问题 2获取数据时localdate会更好。所以最好使用localdate类型 3目前发现localdate在插入时没有时间信息然后多出120000

原文地址: https://www.cveoy.top/t/topic/hU0o 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录