JdbcTemplate:如何以格式化的方式返回 java.util.Date

问题描述 投票:0回答:1

我一直在寻找答案,但没有运气,我有一个数据保存在 MySQL 表中作为

java.util.Date
像这样
2023-01-30
我想做的是检索那个日期并将其格式化为
dd/MM/yyyy
,意思是当我检索日期时应该返回我
30/01/2023

我的桌子:

id 姓名 发布日期
1 教父 2023-01-30
2 好的坏的丑的 2023-01-30

这是我的课:

public record Movie(Integer id,
                    String name,
                    List<Actor> actors,
                    Date releaseDate) {
}

这是我搜索特定日期并返回

movie
但格式化
release_date

的方法
public static final String DEFAULT_DATE_PATTERN = "dd/MM/yyyy";

public List<Movie> selectMovieByDate() throws ParseException {

 String QUERY_GET_CONFIRM_JOURNEE = "select id, name, release_date from movie where date_format(release_date, '%Y/%M/%d') = date_format(?,  '%Y/%M/%d')";
 String stringDate = "2023-01-30";
 Date date1=new SimpleDateFormat("yyyy-MM-dd").parse(stringDate);  
 String dateJournee = this.dateToString(date1, DEFAULT_DATE_PATTERN);
 List<Movie> movies = this.getMovieDetail(QUERY_GET_CONFIRM_JOURNEE, jdbcTemplate,
 new Object[] {dateJournee});
// TODO Auto-generated method stub
return movies;

}

RowMapper 方法

private List<Movie> getMovieDetail(String sql, JdbcTemplate jdbcTemplate, Object[] params) {
    @SuppressWarnings({ "unchecked", "rawtypes", "deprecation" })
    List<Movie> listDto = jdbcTemplate.query(sql, params, new RowMapper() {
        @Override
        public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
            Movie detailPaiementDto = new Movie(rs.getInt("id"), rs.getString("name"),List.of(), rs.getDate("release_date"));
            return detailPaiementDto;
        }
    });
    return listDto;
}

我很确定我错过了日期格式的匹配。谢谢回复

java spring jdbc jdbctemplate
1个回答
0
投票

您使用的是多年前被现代 java.time 类取代的严重缺陷的日期时间类。对于仅限日期的值,请使用

java.time.LocalDate
.

日期时间对象保存日期时间值,而不是文本。日期时间对象没有“格式”。您正在考虑字符串和文本;学会从对象的角度思考。

同样,您应该将 objects 传递给您的 JDBC 调用,而不仅仅是字符串。 JDBC 4.2+ 要求每个驱动程序都支持 java.time 类。见

setObject
/
getObject
方法
PreparedStatement
ResultSet
.

myPreparedStatement.setObject( … , myLocalDate ) ;

所有这些都已经在 Stack Overflow 上多次介绍过。搜索以了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.