Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

JDBC에서 날짜(Date) 데이터를 처리하는 방법 총정리

SQL에서 날짜 값을 저장하려면 DATE 데이터 타입을 사용하면 되며, 자바에서는 java.sql.Date 클래스가 SQL의 DATE 타입과 매핑됩니다.

setDate() 메서드로 날짜 값 삽입하기

PreparedStatement 인터페이스는 setDate()라는 메서드를 제공합니다. 이 메서드를 활용하면 테이블에 손쉽게 날짜 값을 삽입할 수 있습니다. setDate() 메서드는 두 개의 매개변수를 받습니다.

  • 매개변수 인덱스(int): 날짜 값을 설정할 플레이스홀더(?)의 위치를 나타내는 정수입니다.
  • Date 객체: 전달할 날짜 값을 담고 있는 java.sql.Date 객체입니다. 이 클래스의 생성자는 에포크(epoch), 즉 표준 기준 시각인 1970년 1월 1일 00:00:00 GMT부터 경과한 밀리초(ms)를 나타내는 long 타입의 값을 받습니다.

예제

MySQL 데이터베이스에 아래와 같은 구조의 Emp 테이블이 있다고 가정해 보겠습니다.

+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| Name     | varchar(255) | YES  |     | NULL    |       |
| DOB      | date         | YES  |     | NULL    |       |
| Location | varchar(255) | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+

다음 JDBC 프로그램은 이 테이블에 레코드를 삽입하는 예제입니다.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.Date;

public class InsertingDate {
   public static void main(String args[]) throws Exception {
      // 데이터베이스 연결 설정
      String mysqlUrl = "jdbc:mysql://localhost/sampleDB";
      Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
      System.out.println("Connection established......");

      // 테이블에 값 삽입
      String query = "INSERT INTO Emp(Name, DOB, Location) VALUES (?, ?, ?)";
      PreparedStatement pstmt = con.prepareStatement(query);

      pstmt.setString(1, "Amit");
      pstmt.setDate(2, new Date(622790105000L));
      pstmt.setString(3, "Hyderabad");
      pstmt.execute();

      pstmt.setString(1, "Sumith");
      pstmt.setDate(2, new Date(620611200000L));
      pstmt.setString(3, "Vishakhapatnam");
      pstmt.execute();

      pstmt.setString(1, "Sudha");
      pstmt.setDate(2, new Date(336614400000L));
      pstmt.setString(3, "Vijayawada");
      pstmt.execute();

      System.out.println("Records inserted......");
   }
}

실행 결과

Connection established......
Records inserted......

MySQL 데이터베이스에서 해당 테이블을 조회해 보면 아래와 같이 데이터가 정상적으로 저장된 것을 확인할 수 있습니다.

mysql> select * from Emp;
+--------+------------+----------------+
| Name   | DOB        | Location       |
+--------+------------+----------------+
| Amit   | 1989-09-26 | Hyderabad      |
| Sumith | 2019-03-19 | Vishakhapatnam |
| Sudha  | 2019-03-19 | Vijayawada     |
+--------+------------+----------------+
3 rows in set (0.00 sec)

추가 팁: LocalDate 활용하기

JDBC 4.2 이상에서는 java.time.LocalDate 객체를 setObject() 메서드로 직접 전달할 수도 있습니다. 밀리초 계산 없이 LocalDate.of(1989, 9, 26)처럼 간결하게 날짜를 지정할 수 있어 가독성과 유지보수성이 크게 향상되므로, 최신 프로젝트에서는 LocalDate 사용을 권장합니다.