JDBC : Java Database Cinnectivity의 약자로, 다양한 DBMS와 Connection, SQL 전달, 결과 응답을 위한 방법을 인터페이스로 통일해 Java로 코딩 시 DBMS의 구분 없이 DB에 접근하기 위한 기술
* WAS 와 DB 사이의 통신
1. Connection : JDBC의 Connection으로 구현되어 있음
2. SQL 전달 : JDBC의 Statement로 구현되어 있음
3. 결과 응답 : JDBC의 ResultSet으로 구현되어 있음
위 3개 인터페이스를 각 DBMS 마다 구현했고, 그것을 JDBC 드라이버라 부른다.
H2 DB를 사용하면 H2 JDBC 드라이버.
WAS는 JDBC 인터페이스를 참조하고 있으며, 이 것의 구현체인 드라이버를 사용해 DB에 접근한다.
1. Connection
그렇다면 여러 개의 DBMS 들 중 알맞은 드라이버를 어떻게 찾아서 사용할까?
바로 DriverManager에 URL 정보를 전달해 알맞은 드라이버를 가져온다.
DriverManager는 라이브러리 안에 있는 드라이버들을 탐색하며, 전달한 URL 정보에 알맞은 드라이버를 선택하고, connection을 전달한다.
2. Statement
연결한 connection과 SQL 구문을 통해 통해 Statement를 생성하고, 파라미터 값을 바인딩한 후 DB로 SQL문을 전달한다.
// SQL 구문 생성
String sql = "insert into member(member_id, money) values(?, ?)";
// Connection 연결
Connection con = DriverManager.getConnection(URL, USERNAME, PASSWORD);
// 연결한 Connection과 SQL 구문으로 Statement 생성
PreparedStatement pstmt = con.prepareStatement(sql);
// SQL 에 파라미터 바인딩 후 DB 로 보내기
pstmt.setString(1, parm1);
pstmt.setInt(2, parm2);
pstmt.executeUpdate();
3. ResultSet
위 예시는 데이터를 변경하는 예시로 executeUpdate를 사용했고, 해당 함수는 영향받은 raw 수를 int로 반환한다,
반면 조회의 경우 해당 조회데이터를 ResultSet에 넣어 반환하고, executeQuery 함수를 사용한다!
ResultSet에는 조회한 데이터 이름이 담겨있다. 즉 DB의 칼럼 이름!
또, ResultSet에는 커서가 있어 next()를 호출해 데이터가 있는지 확인할 수 있다.
참고로 처음 커서는 0으로 아무것도 가리키고 있지 않고, next()를 한번 호출해야 데이터를 가져올 수 있다. 그래서 아래와 같이 if문에서 next()를 호출해 데이터를 확인하고 커서를 넘겨 처음 데이터를 가리키도록 한다.
이후 ResultSet에서 데이터를 꺼내서 조합 후 반환한다.
// SQL 구문 생성
String sql = "select member_id, money from member where member_id = ?";
// Connection 연결
Connection con = DriverManager.getConnection(URL, USERNAME, PASSWORD);
// 연결한 Connection과 SQL 구문으로 Statement 생성
PreparedStatement pstmt = con.prepareStatement(sql);
// SQL 에 파라미터 바인딩 후 DB 로 보내 ResultSet받기
pstmt.setString(1, parm1);
ResultSet rs = pstmt.executeQuery();
//ResultSet에서 값 꺼내 데이터 받아서 리턴하기
if(rs.next()){
Member member = new Member();
member.setMemberId(rs.getString("member_id"));
membet.setMoney(rs.getInt("money"));
return member;
} else {
throw new NoSuchElementException();
}
'코딩 > JAVA 공부' 카테고리의 다른 글
| [Spring] DB의 이해, Transaction!! (0) | 2023.06.25 |
|---|---|
| [Spring] DB의 이해, Connection Pool 과 DataSource (0) | 2023.06.24 |
| [Spring] JSP 와 Servlet, JSP 를 활용한 MVC 구조 (0) | 2023.06.04 |
| [Spring] 웹애플리케이션 이해 - Servlet (0) | 2023.06.03 |
| [Spring] 빈 스코프 (0) | 2023.05.20 |