Java Database Connectivity(JDBC)는 Java 애플리케이션이 데이터베이스와 상호작용 할 수 있도록 지원하는 표준 API입니다. JDBC를 활용하면 SQL 쿼리를 실행하고, 데이터를 검색하거나 업데이트하는 작업을 손쉽게 처리할 수 있습니다. 이번 블로그에서는 JDBC를 이용해 데이터베이스와 연결하고 SQL 쿼리를 실행하는 방법을 단계 별로 알아보겠습니다.
1. JDBC란?
JDBC(Java Database Connectivity)는 Java 애플리케이션과 다양한 데이터베이스 시스템(MySQL, Oracle, PostgreSQL 등) 간의 연결을 관리하는 표준 인터페이스입니다.
JDBC의 주요 구성 요소
- DriverManager: 데이터베이스 연결을 관리를 나타냅니다.
- Connection: 데이터베이스와의 연결을 나타냅니다.
- Statement: SQL 쿼리를 실행 합니다.
- ResultSet: 쿼리 실행 결과를 저장 합니다.
2. JDBC를 이용한 기본 데이터베이스 연결
다음은 MySQL 데이터베이스에 연결하는 예제입니다.
예제 코드
import java.sql.*;
public class JDBCConnectionExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/testdb";
String username = "root";
String password = "password";
try {
// 데이터베이스 연결
Connection connection = DriverManager.getConnection(url, username, password);
System.out.println("데이터베이스에 연결되었습니다.");
// 연결 종료
connection.close();
} catch (SQLException e) {
System.out.println("데이터베이스 연결 실패: " + e.getMessage());
}
}
}
설명
DriverManager.getConnection()
: 데이터베이스와 연결을 생성 합니다.url
: 데이터베이스의 위치 (호스트명, 포트, 데이터베이스 이름 포함)입니다.username
과password
: 데이터베이스 접근을 위한 인증 정보입니다.
3. SQL 쿼리 실행하기
데이터베이스 연결 후, SQL 쿼리를 실행하여 데이터를 삽입, 검색, 업데이트, 삭제할 수 있습니다.
- 데이터 삽입
String insertQuery = "INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com')";
try (Connection connection = DriverManager.getConnection(url, username, password);
Statement statement = connection.createStatement()) {
int rowsInserted = statement.executeUpdate(insertQuery);
System.out.println(rowsInserted + "개의 행이 삽입되었습니다.");
} catch (SQLException e) {
System.out.println("쿼리 실행 실패: " + e.getMessage());
}
- 데이터 검색
String selectQuery = "SELECT * FROM users";
try (Connection connection = DriverManager.getConnection(url, username, password);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(selectQuery)) {
while (resultSet.next()) {
System.out.println("ID: " + resultSet.getInt("id") + ", Name: " + resultSet.getString("name") + ", Email: " + resultSet.getString("email"));
}
} catch (SQLException e) {
System.out.println("쿼리 실행 실패: " + e.getMessage());
}
- 데이터 업데이트
String updateQuery = "UPDATE users SET email = 'new_email@example.com' WHERE id = 1";
try (Connection connection = DriverManager.getConnection(url, username, password);
Statement statement = connection.createStatement()) {
int rowsUpdated = statement.executeUpdate(updateQuery);
System.out.println(rowsUpdated + "개의 행이 업데이트되었습니다.");
} catch (SQLException e) {
System.out.println("쿼리 실행 실패: " + e.getMessage());
}
4. PreparedStatement 사용하기
PreparedStatement
는 SQL 인젝션 공격을 방지하고, 쿼리 실행 속도를 향상시킵니다.
예제:
String preparedQuery = "INSERT INTO users (name, email) VALUES (?, ?)";
try (Connection connection = DriverManager.getConnection(url, username, password);
PreparedStatement preparedStatement = connection.prepareStatement(preparedQuery)) {
preparedStatement.setString(1, "Jane Doe");
preparedStatement.setString(2, "jane@example.com");
int rowsInserted = preparedStatement.executeUpdate();
System.out.println(rowsInserted + "개의 행이 삽입되었습니다.");
} catch (SQLException e) {
System.out.println("쿼리 실행 실패: " + e.getMessage());
}
5. JDBC 사용 시 주의사항
- 자원 해제
Connection
,Statement
,ResultSet
과 같은 객체를 사용 후 반드시 닫아야 합니다.try-with-resources
를 사용하면 자원을 자동으로 해제할 수 있습니다.
- SQL 인젝션 방지
PreparedStatement
를 사용하여 입력값을 처리 합니다.
- 드라이버 로드
- JDBC 드라이버를 추가해야 합니다. (예: MySQL의 경우
mysql-connector-java
라이브러리 필요)
- JDBC 드라이버를 추가해야 합니다. (예: MySQL의 경우
- 성능 최적화
- 커넥션 풀(Connection Pool)을 사용하여 반복적인 연결/해제 비용을 줄입니다.
결론
Java에서의 데이터베이스 연결 중 JDBC를 이용한 SQL 쿼리 실행에 대해 알아보았습니다. JDBC는 Java 애플리케이션에서 데이터베이스와 상호작용하는 표준화된 방법을 제공하는데 연결 설정, SQL 실행, 자원 관리를 적절히 활용하면 데이터베이스 작업을 효율적으로 처리할 수 있습니다.
실무에서는 PreparedStatement
와 커넥션 풀을 적극 활용하여 성능과 보안성을 향상시키는 것이 중요합니다. 다음 블로그에서는 Java에서 JSON 파싱과 생성 방법에 대해서 알아 보겠습니다. 감사합니다.