BackEnd/JDBC

[JDBC] PrepareStatement에서 TimeStamp, LocalDateTime 사용하기

샤아이인 2022. 3. 6.

 

글의 작성 이유

이번 글 에서는 JDBC를 사용하여 DB에 날짜를 저장하는 삽질에 대한 글을 작성하는 것 입니다.

 

우선 DB상에서 날짜를 Date, Timestamp 자료형으로 저장한 경우에 대하여 알아보자.

 

1. java.sql.Date 사용하기

만약 나의 Table에서 Date column을 사용중 이라면 사용할수가 있다.

  • java.lang.String
    ps.setDate(2, java.sql.Date.valueOf("2013-09-04"));
    
     java.sql.Date.valueOf(java.lang.String) 메서드는 날짜에 대한 String을 다음과 같은 포멧으로 받을 수 있다. yyyy-MM-dd
  • java.util.Date
    ps.setDate(2, new java.sql.Date(endDate.getTime());
    
    java.util.Date 타입의 endDate라는 변수를 사용하는 경우는 위와 같이 사용하면 된다!
  • Current
    ps.setDate(2, new java.sql.Date(System.currentTimeMillis()));
    
    // Since Java 8
    ps.setDate(2, java.sql.Date.valueOf(java.time.LocalDate.now()));
    현 시간을 삽입하고 싶다면 위와 같이 사용하면 된다.

 

2. java.sql.Timestamp 사용하기

만약 DB Table 에서 TIMESTAMP or DATETIME 를 사용중 이라면 사용할수 있다.

  • java.lang.String
    ps.setTimestamp(2, java.sql.Timestamp.valueOf("2013-09-04 13:30:00");
    
     java.sql.Timestamp.valueOf(java.lang.String) 를 사용하여 포멧팅 된 형식으로 받을 수 있다. yyyy-MM-dd
  • java.util.Date
    ps.setTimestamp(2, new java.sql.Timestamp(endDate.getTime()));
    
    java.util.Date 타입의 endDate라는 변수를 사용하는 경우는 위와 같이 사용하면 된다!
  • Current
    ps.setTimestamp(2, new java.sql.Timestamp(System.currentTimeMillis()));
    
    // Since Java 8
    ps.setTimestamp(2, java.sql.Timestamp.from(java.time.Instant.now()));
    ps.setTimestamp(2, java.sql.Timestamp.valueOf(java.time.LocalDateTime.now()));
     현재의 timestamp가 필요하다면 위와같이 사용하자!

 

3. 코드 예시

public Long save(Article article) {
    String SQL = "INSERT INTO article (user_id, title, contents, local_date_time) VALUES (?, ?, ?, ?)";
    Connection connection = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    try {
        connection = getConnection();
        pstmt = connection.prepareStatement(SQL, Statement.RETURN_GENERATED_KEYS);
        pstmt.setString(1, article.getUserId());
        pstmt.setString(2, article.getTitle());
        pstmt.setString(3, article.getContents());
        pstmt.setTimestamp(4, Timestamp.valueOf(article.getLocalDateTime()));
        pstmt.executeUpdate();

        rs = pstmt.getGeneratedKeys();
        if (rs.next()) {
            article.setId(rs.getLong(1));
            return article.getId();
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        close(connection, pstmt, rs);
    }
    return -1L;
}

댓글