솔솔
[Java] JDBC란? 본문
반응형
🍀 JDBC란?
Java에서 데이터베이스와 연결하고 상호작용할 수 있도록 해주는 API
🍀 JDBC의 주요 구성 요소
- DriverManager: 데이터베이스 드라이버를 로드하고, 데이터베이스 연결을 관리.
- Connection: 데이터베이스와의 연결
- Statement: SQL 문을 실행
- PreparedStatement: 사전 컴파일된 SQL 문을 실행하는 데 사용됨
- ResultSet: SQL 쿼리의 결과를 저장하고 탐색할 수 있음
🍀 JDBC의 주요 구성 요소 상세
1. Connection
- Connection 객체는 데이터베이스와의 연결을 나타내며 DriverManager를 통해 생성됨
import java.sql.Connection;
Connection conn = DriverManager.getConnection(url, user, password)
2. PreparedStatement
- PreparedStatement 객체는 처음 생성될 때 SQL 문을 전달받고 컴파일됨(SQL 문법 검증 및 SQL 구문의 파싱) → 재사용될 때마다 동일한 SQL 구문을 반복적으로 실행할 수 있고 이 때 문법 검증 과정은 생략됨.
import java.sql.PreparedStatement;
// executeQuery() : SELECT 실행 후 ResultSet 반환
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM emp WHERE empname = ?");
pstmt.setString(1, "mark");
int rowsInserted = pstmt.executeQuery();
// executeUpdate() : INSERT / UPDATE / DELETE 실행 후 INT 반환
pstmt = con.prepareStatement(UPDATE emp SET empno = ? WHERE empname = ?);
pstmt.setString(1, 1);
pstmt.setString(2, "jany");
int rowsUpdated = pstmt.executeUpdate();
3. Statement
- Statement 객체를 사용하여 기본적인 데이터베이스 작업(삽입, 조회, 업데이트, 삭제)을 수행
import java.sql.Statement;
// Statement 객체 생성
Statement stmt = conn.createStatement();
// executeUpdate() : INSERT / UPDATE / DELETE 실행 후 INT 반환
int rowsInserted = stmt.executeUpdate("insert into dept values (15, '교육부', '상암')");
// executeQuery() : SELECT 실행 후 ResultSet 반환
// ResultSet의 next 메서드를 사용하여 결과를 순차적으로 탐색
/* 커서가 속성부분(테이블의 헤더) 있다 생각하고 next로 다음 로우, 다음 로우 내려온다 생각하면 됨
+--------+------------+----------+
| deptno | dname | loc |
+--------+------------+----------+
| 10 | ACCOUNTING | NEW YORK |
| 15 | 교육부 | 상암 |
| 20 | RESEARCH | DALLAS |
| 30 | 영업 | CHICAGO |
*/
rs = stmt.executeQuery("select * from dept");
☁️ 마이 띵킹 ☁️
MyBatis와 JPA는 각각의 방식으로 데이터베이스와 상호작용하는 프레임워크이다. 이 두 가지 프레임워크는 다르지만 결국 내부적으로는 JDBC를 사용하여 데이터베이스와 연결된다. JDBC에 대한 지식 없이도 MyBatis와 JPA를 활용하여 애플리케이션을 개발하는 것은 가능했지만 개발 중에 에러가 발생했을 때 JDBC에 대한 이해가 있으면 문제를 해결하는 데 큰 차이를 만들 수 있지 않을까 생각이들면서 오늘도 홧팅..!
'나의보물들 > Java' 카테고리의 다른 글
[Java] Scanner vs BufferedReader 차이점 (0) | 2025.02.15 |
---|---|
[Java] Lombok이란? (0) | 2024.08.04 |
[Java] MVC (Model-View-Controller) 패턴에서의 예외처리 (3) | 2024.07.27 |
Java에서 Stream을 활용하여 정수 데이터를 처리할 때 왜 반환 타입이 다를까? (0) | 2024.07.15 |
[Java] ConcurrentModificationException 에러 (0) | 2024.07.13 |