< JDBC (Java Database Connectivity) >
- Java에서 데이터베이스와 상호작용할 수 있도록 해주는 API
- JDBC는 데이터베이스 독립적인 API를 제공하여, Java 애플리케이션이 다양한 데이터베이스 시스템과 쉽게 연결되고 SQL 쿼리를 실행할 수 있게 해준다
- 데이터베이스 연결:
JDBC는 Java 애플리케이션에서 데이터베이스와의 연결을 설정하는 방법을 제공한다
연결을 설정한 후 SQL 명령을 통해 데이터를 삽입, 삭제, 갱신, 조회할 수 있다
- SQL 실행:
JDBC는 SQL 쿼리를 실행하기 위한 메서드를 제공하여 데이터베이스의 테이블에서 데이터를 가져오거나 변경하는 등의 작업을 수행할 수 있다
SQL 문은 Statement, PreparedStatement, CallableStatement와 같은 객체를 통해 실행된다
- 데이터베이스 독립성:
JDBC는 데이터베이스에 독립적인 인터페이스를 제공하기 때문에,
동일한 JDBC 코드를 사용하여 다양한 종류의 데이터베이스에 연결할 수 있다(예: MySQL, Oracle, PostgreSQL 등)
이를 위해 각 데이터베이스에 맞는 JDBC 드라이버를 사용한다
- 커넥션 풀링 및 트랜잭션 관리:
JDBC는 데이터베이스 연결을 재사용하여 성능을 향상시키는 커넥션 풀링(Connection Pooling) 및 트랜잭션(Transaction) 기능도 제공한다
< 주요 컴포넌트 >
DriverManager:
- DriverManager는 JDBC 드라이버를 관리하고, 애플리케이션에서 데이터베이스로 연결을 설정할 수 있는 API를 제공한다
- JDBC 드라이버를 로드하고, 데이터베이스에 연결을 요청할 때 주로 사용된다
Connection conn = DriverManager.getConnection(url, user, password);
Connection:
- Connection 객체는 데이터베이스와의 연결을 나타낸다
- 이 객체는 SQL 쿼리를 실행하고, 트랜잭션을 관리하며, 연결을 닫을 때 사용된다
Statement:
- Statement 객체는 SQL 쿼리를 데이터베이스에 전달하고 그 결과를 받아오기 위한 객체이다
- 기본 SQL 쿼리뿐만 아니라, 데이터 업데이트, 삭제, 삽입 등의 작업을 할 수 있다
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM users");
PreparedStatement:
- PreparedStatement는 Statement와 유사하지만, 더 안전하고 성능이 뛰어나다
- 미리 컴파일된 SQL 쿼리를 사용하여, 동적으로 쿼리의 매개변수를 설정할 수 있으며,
- SQL 인젝션 공격을 방지하는 데 도움이 된다
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM users WHERE id = ?");
pstmt.setInt(1, 1001);
ResultSet rs = pstmt.executeQuery();
ResultSet:
- ResultSet은 SQL 쿼리의 결과를 저장하는 객체이다
- 데이터베이스에서 가져온 행(row)들을 포함하고, 각 행을 탐색하며 데이터를 읽을 수 있다
while (rs.next()) {
System.out.println("User ID: " + rs.getInt("id"));
}
< JDBC 동작 흐름 >
1) JDBC 드라이버 로드:
- DriverManager가 적절한 JDBC 드라이버를 로드한다
- 예전에는 명시적으로 Class.forName("com.mysql.cj.jdbc.Driver")를 호출했으나, 최신 JDBC에서는 자동으로 드라이버를 로드할 수 있다
2) 데이터베이스 연결:
- DriverManager.getConnection() 메서드를 사용해 데이터베이스와의 연결을 설정한다
- 이때 URL, 사용자 이름, 비밀번호를 전달한다
3) SQL 쿼리 실행:
- Statement나 PreparedStatement 객체를 사용하여 SQL 쿼리를 실행한다
4) 결과 처리:
- SQL 쿼리 실행 후 ResultSet을 통해 결과를 처리한다
- 결과 집합을 하나씩 읽어 처리하거나 업데이트 쿼리의 경우 영향을 받은 행의 수를 확인한다
5) 연결 종료:
- 모든 작업이 끝난 후에는 Connection.close() 메서드를 호출하여 데이터베이스와의 연결을 종료해야 한다
< MySQL Connector/J >
- Java 에서 MySQL 데이터베이스와 연결할 수 있도록 해주는 JDBC (Java Database Connectivity) 드라이버이다
- 이를 통해 Java 프로그램은 MySQL 데이터베이스에 SQL 쿼리를 수행하고 데이터를 주고받을 수 있다
- JDBC 표준을 따르기 때문에, 표준화된 Java API를 사용하여 데이터베이스와 상호작용할 수 있다
- 이를 통해 Java 애플리케이션이 MySQL뿐만 아니라 다른 데이터베이스로 쉽게 포팅될 수 있다
- MySQL Connector/J는 최신 JDBC 표준(현재 JDBC 4.2)까지 지원하며, 기본적인 데이터베이스 연결뿐만 아니라 메타데이터 검색, 배치 업데이트, 트랜잭션 관리 등 다양한 기능을 제공한다
- MySQL 전용 드라이버로서, MySQL의 고유한 기능(예: 여러 엔진에 대한 지원, JSON 데이터형 처리 등)에 최적화된 성능을 제공한다
- MySQL Connector/J는 SSL(보안 소켓 계층) 연결을 지원하여, 데이터베이스와의 통신을 암호화할 수 있다
- 다양한 인증 메커니즘을 통해 보안 연결을 보장한다
- 커넥션 풀링 기능을 사용하여 데이터베이스 연결을 재사용함으로써 성능을 최적화할 수 있다
- 이는 연결을 반복해서 생성하고 닫는 비용을 줄여주며, 특히 대규모 애플리케이션에서 매우 유용하다
- Connector/J는 다양한 문자 인코딩을 지원하며, 유니코드 데이터 처리에도 강력한 지원을 제공한다
- 이를 통해 국제화 및 다국어 지원 애플리케이션에서 원활한 데이터 처리가 가능하다
Statement stmt = null;
int result = 0;
stmt = conn.createStatement();
result = stmt.executeUpdate(sql);
executeUpdate(sql)는
- SQL 쿼리를 실행하고,
- 주로 데이터베이스의 데이터를 변경하는 쿼리(예: INSERT, UPDATE, DELETE)를 수행할 때 사용된다
- 반환값(result)은 SQL 문에 의해 영향을 받은 행의 수이다
Statement stmt = null;
ResultSet rs = null;
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while (rs.next()) {
int deptno = rs.getInt("deptno");
String dname = rs.getString("dname");
String loc = rs.getString("loc");
System.out.println("학과번호 : " + deptno);
System.out.println("학과이름 : " + dname);
System.out.println("위치 : " + loc);
System.out.println();
}
- ResultSet은 SQL 쿼리의 결과를 저장하는 객체이다
- SQL 쿼리 실행 후 ResultSet을 통해 결과를 처리한다
- 데이터베이스에서 가져온 행(row)들을 포함하고, 각 행을 탐색하며 데이터를 읽을 수 있다
- 결과 집합을 하나씩 읽어 처리한다
sql문 수행하고 나면 생성된 역순으로 close를 해줘야 한다
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
System.out.println("=== MySQL Disconnection Fail ===");
System.out.println(e.getMessage());
}
}
'IT > JAVA' 카테고리의 다른 글
Java 란 (3) | 2024.12.27 |
---|---|
MyBatis Log4j Error (0) | 2024.10.10 |
JDK 설치 (0) | 2024.10.06 |
CRUD (1) | 2024.10.01 |
Java Exception Error (1) | 2024.09.30 |