[JDBC #2] 순수 JDBC 이해하기
2024. 10. 31. 22:09ㆍ데이터베이스/JDBC

DB와 연결하기
- JDBC는 DB를 연결시켜주는 인터페이스 이므로, DB에 접근하기 위한 정보들이 필요하다
- DB의 주소 (Ex: URL), DB 접근 계정 정보 (Ex: ID / PASSWORD)들이 필요하다
- DriverManager 혹은 DataSource를 사용 (DriverManager를 활용한 JDBC를 사용해보고자 한다.)
DriverManager의 장단점
| 장점 | 단점 |
| 단순하고 직관적이다 | 커넥션 풀 미지원 (매번 DB 연결/해제) |
| 외부 의존 없이 동작 | 매번 연결/닫기를 수동으로 처리해야 한다 |
| JDBC 표준 API이므로 범용성 있음 | 트랜잭션, 커넥션 재사용 등 고급 기능 부족 |
DriverManager의 경우, 간단하거나 순수 JDBC를 연습할때는 사용할만하지만 커넥션을 매번 맺고 끊어야하기에 리소스 낭비가 발생할 수 있으므로 사용시에 충분한 고려가 필요하다 (커넥션 풀 미지원)
DriverManger 사용법
public DBUtil{
//...
public static Connection getConnection(){
return DriverManager.getConnection(
ConnectionConst.URL,
ConnectionConst.USERNAME,
ConnectionConst.PASSWORD);
}
}
- DB의 주소 (URL), DB 접근계정(USERNAME, PASSWORD)를 파라미터로 넘기면 DB와 연결을 시도한다.
JDBC 기본 구조
1. Connection : DB연결을 위한 자바 인터페이스
2. PreparedStatement : sql 구문 정의
3. ResultSet : DB 결과 응답 값 저장
Connection con = null; // DB 연결
PreparedStatement pstmt = null; // SQL 구문
ResultSet rs = null; // 결과값
try{
con = DBUtil.getConnection(URL, USERNAME, PASSWORD);
pstmt = con.prepareStatement("sql구문");
pstmt.setString() // sql에 필요한 인자값 셋팅
pstmt.executeUpdate() // 쿼리 실행
}
catch ( SQLException e ){
// ...
}
finally{
if(rs != null) rs.close();
if(pstmt != null) pstmt.close();
if(con != null) con.close();
}
JDBC 사용 방법
1) Connection 사용 방법
- DriverManager를 사용 (DB와 연결)
Ex) DriverManager.getConnection( URL, USERNAME, PASSWORD);
2) PrepareStateMent 사용 방법
- setXXX : String, int, Array, Blob ... 등 여러가지 데이터 타입을 지정하여 SQL 인자로 넣을 수 있다.
Ex) prepareStatement.setString(1, member.getName());
- executeXXX..() : SQL 실행 메서드 ( 반환값 유무에 따라 다른 메서드를 사용 )
Ex) executeUpdate() : 결과값 없이 SQL 구문 실행 ( Insert, Update, Delete ..)
Ex) executeQuery() : 결과값이 있는(ResultSet이 존재하는) SQL 구문 실행 (SELECT)
3) ResultSet 사용 방법
- 사용 방식 : 원하는 객체형태로 역직렬화과정이 필요
- 추출 방식 : index 혹은 Label 정보를 통한 값 추출 가능
- ResultSet의 경우, 반복문을 통해 row 한개씩 찾으며, 값을 추출한다.
JDBC 예제
public void save(Member member) throws SQLException{
try{
con = DBConnectionUtil.getConnection();
pstmt = con.prepareStatement("INSERT INTO MEMBER(name, age, addr) VALUES (?,?,?)");
pstmt.setString(1, member.getName());
pstmt.setInt(2, member.getAge());
pstmt.setString(3, member.getAddr());
pstmt.executeUpdate();
}catch (SQLException e){
log.error("[JDBC] save() error {}",e.getMessage());
throw new RuntimeException("save() error!", e);
}finally{
if(rs != null) rs.close();
if(pstmt != null) pstmt.close();
if(con != null) con.close();
}
}
public List<Member> findAll() throws SQLException{
try{
con = DBConnectionUtil.getConnection();
pstmt = con.prepareStatement("SELECT name, age, addr FROM MEMBER");
rs = pstmt.executeQuery();
List<Member> result = new ArrayList<>();
while(rs.next()){
Member member = new Member();
member.setName(rs.getString("name"));
member.setAge(rs.getInt("age"));
member.setAddr(rs.getString("age"));
result.add(member);
}
return result;
}catch(SQLException e){
throw new RuntimeException("findAll() Error!");
}finally {
if(rs != null) rs.close();
if(pstmt != null) pstmt.close();
if(con!= null )con.close();
}
}
'데이터베이스 > JDBC' 카테고리의 다른 글
| [JDBC #4] PlatformTransactionManager을 통한 트랜잭션 관리 (0) | 2024.11.05 |
|---|---|
| [JDBC #3] 순수 JDBC와 트랜잭션 이해하기 (0) | 2024.11.05 |
| [DataSource] Connection Pool의 이해와 DataSource (7) | 2024.11.04 |
| [JDBC#1] JDBC의 기본 설명 및 구조 이해하기 (0) | 2024.10.31 |