JDBC : Java DataBase Connectivity
Java 기반 애플리케이션의 데이터를 데이터베이스에 저장 및 업데이트하거나, 데이터베이스에 저장된 데이터를 Java에서 사용할 수 있도록 하는 자바 API이다.
JDBC 표준 인터페이스
JDBC의 동작 흐름
JDBC API 사용 흐름
단계 | 설명 | 예외 |
1단계 DriverLoading |
Class.forName("") : Oracle을 연결하기 위한 class 파일을 로드 | ClassNotFoundException |
2단계 Connection 연결 |
java.sql.Connection > DriverManager java.sql.Connection conn = DriverManager.getConnection(url, username, password) url - jdbc:oracle:thin@주소:포트:서비스명 ex) jdbc:oracle:thin:@localhost:1521:xe username : EDU password : EDU |
SQLException |
3단계 쿼리준비 |
java.sql.Statement > java.sql.PreparedStatement (create 사용시 하드 부하가 심하다) '?'로 값을 바인딩한다 java.sql.preparedStatement = conn.prepareStatement(sql문) ex) String sql = "SELECT EMPNO FROM EMP WHERE EMPNO = ?" stmt.setInt(7900); |
SQLException |
4단계 쿼리 실행 |
쿼리가 준비됨 임시영역인 (PreparedStatement)를 실행 SELECT : stmt.executeQuery() -> java.sql.ResultSet INSERT : stmt.executeUpdate() -> 성공한 row의 갯수를 반환 DELETE : " UPDATE : " |
SQLException |
5단계 결과 값 받기 |
4단계 실행을 했을 경우 SELECT 쿼리만이 결과를 반환 java.sql.ResultSet -> Iterator 패턴으로 값을 출력 |
SQLException |
6단계 닫기 |
Stream 객체는 반드시 닫아 줘야 한다 java.sql.ResultSet -> java.sql.Statement -> java.sql.Connection 열었던 역순서대로 닫아준다 |
SQLException |
쉽게 이해하기
1. 실제 구동 코드는 Driver가 가지고 있다.
2. JDBC는 그저 연결 API일뿐 쿼리를 다루는 기능이 없다.
3. 그러므로 DB 사용을 위해 Driver 로드해야만 한다.
4. 드라이버 로드 : 드라이버를 객체화하는 것
- new 연산자 사용이 아니라 Class.forName을 통해 객체를 생성 >> 메모리가 잡힘
5. 드라이버 매니저를 통해 연결 객체를 얻고 Connection conn
6. 이후 이를 토대로 실행도구 생성 Statement stmt
7.결과 실행 (쿼리 수정등) ResultSet rs
- conn, stmt, rs 모두 객체 생성이지만 new 연산자를 사용하지 않는다.
- 반드시 이 순서대로 그대로 해야한다.
- Driver를 통해서 conn을 만들고 conn을 통해서 st를 만들고 st를 통해서 rs를 만드는 순차적인 생성이기 때문
- ResultSet 객체가 만들어졌다는 것은 결과를 받아오는게 아니라 결과를 이용할 수 있는 상태가 되었다는 것
'DB > JDBC' 카테고리의 다른 글
JDBC :: Statement / PreparedStatement / '?' (0) | 2024.05.01 |
---|---|
JDBC :: Oracle Driver 의존성 주입 코드 (0) | 2024.05.01 |
JDBC :: Driver / DTO / DAO (0) | 2024.05.01 |