글의 작성 이유
이번 글 에서는 JDBC를 사용하여 DB에 날짜를 저장하는 삽질에 대한 글을 작성하는 것 입니다.
우선 DB상에서 날짜를 Date, Timestamp 자료형으로 저장한 경우에 대하여 알아보자.
1. java.sql.Date 사용하기
만약 나의 Table에서 Date column을 사용중 이라면 사용할수가 있다.
- java.lang.String
java.sql.Date.valueOf(java.lang.String) 메서드는 날짜에 대한 String을 다음과 같은 포멧으로 받을 수 있다. yyyy-MM-ddps.setDate(2, java.sql.Date.valueOf("2013-09-04"));
- java.util.Date
java.util.Date 타입의 endDate라는 변수를 사용하는 경우는 위와 같이 사용하면 된다!ps.setDate(2, new java.sql.Date(endDate.getTime());
- 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
java.sql.Timestamp.valueOf(java.lang.String) 를 사용하여 포멧팅 된 형식으로 받을 수 있다. yyyy-MM-ddps.setTimestamp(2, java.sql.Timestamp.valueOf("2013-09-04 13:30:00");
- java.util.Date
java.util.Date 타입의 endDate라는 변수를 사용하는 경우는 위와 같이 사용하면 된다!ps.setTimestamp(2, new java.sql.Timestamp(endDate.getTime()));
- Current
현재의 timestamp가 필요하다면 위와같이 사용하자!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()));
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;
}
'BackEnd > JDBC' 카테고리의 다른 글
[JDBC] DAO 리팩토링 2 - 하나의 Template 으로 이동 (0) | 2022.03.13 |
---|---|
[JDBC] DAO 리팩토링 1 - 개별 Template 만들기 (0) | 2022.03.12 |
[JDBC] 순수 JDBC CRUD 코드 (0) | 2022.03.12 |
[JDBC] INSERT에 대한 자동 생성 키 값 검색하기 (0) | 2022.03.04 |
[oracle] oracle 19c scott 계정 활성화 (13) | 2022.02.07 |
댓글