본문 바로가기

JSP

[JSP] JDBC - SELECT / Connection / Statement / ResultSet

* JDBC (Java Database Connectivity)

- 자바로 만든 애플리케이션이 데이터베이스에 일관된 방식으로 접근할 수 있도록 API를 제공하는 클래스의 집합

- JDBC를 통해 SQL을 데이터베이스와 주고 받을 수 있음

- 클래스들과 인터페이스들의 묶음

 

* JDBC를 이용하여 데이터베이스에 연결하는 순서

1) JDBC 드라이버 로드 - DriverManager

2) 데이터베이스와 연결 - Connection

3) SQL문 실행 - Statement / ResultSet

4) 데이터베이스와 연결 끊음

 

* 데이터베이스 연결 관련 인터페이스

1) Connection

- 데이터베이스 연결 / DriverManager.getConnection() 으로 얻음

2) Statement

- 질의, 갱신 실행 / connection.createStatement() 로 얻음

3) ResultSet

- 결과물 / statement.executeQuery() 로 얻음


* 본격적으로 연결을 진행해보자.

 

1) WEB-INF/lib 폴더에 ojdbc6.jar 파일 로드

- 자바와 데이터베이스를 연결할 때 사용할 API가 들어있음

 

2) JSP 파일 선언부에 연결을 위한 객체 변수 선언

- 필요한 객체들을 선언 (Connection, Statement, ResultSet)

- DB 연결에 필요한 정보를 초기화 (String url, uid, pass)

- SQL문 작성 (String sql)

 

3) 실질적인 작동 로직

 


* 작동 로직 자세히 알아보기

 

1) JDBC 드라이브를 로드해주는 DriverManager 객체

Class.forName("oracle.jdbc.driver.OracleDriver");

- DriverManager는 드라이버만 관리하는 객체

 

2) 데이터베이스에 연결해주는 Connection 객체

Connection conn = DriverManager.getConnection(url, uid, pwd);

- 연결을 설정한 getConnection() 메서드의 결과값을 conn 변수에 저장

- 객체 변수 conn : 실제로 DB와 연결되어 작업을 수행할 수 있는 통로

- DB 사용이 끝나면 conn.close(); 로 연결 끊어주기

 

3) 쿼리문을 수행하는 Statement 객체

Statement stmt = conn.createStatement();

 

* 쿼리문을 수행하는 메서드

- executeQuery() : select / 여러 개의 레코드가 구해지는 경우

- executeUpdate() : insert, update, delete / 내부적으로 데이터만 변경되고 결과 값이 없는 경우

 

* DB 사용이 끝나면 stmt.close(); 로 연결 끊어주기

 

4) 결과 값을 저장하는 ResultSet 객체

String sql = "select * from member";

ResultSet rs = stmt.executeQuery(sql);

while(rs.next()) {

      out.println(rs.getString(1));

      out.println(rs.getString(2)); ...

}

 

* next() 메서드

- 현재 행에서 다음 행으로 이동 (= 레코드 단위의 이동, 한줄 한줄)

- 성공적으로 진행할 경우 ture, 아닐 경우 false 리턴. 더 이상 레코드가 없다면 false를 반환하면서 while문 빠져나옴

 

* 원하는 컬럼의 내용 얻어오기

- rs.getXXX(컬럼의 인덱스 값);

 

* DB 사용이 끝나면 rs.close(); 로 연결 끊어주기

'JSP' 카테고리의 다른 글

커넥션 풀 (DBCP)  (0) 2020.09.13
[JSP] JDBC - INSERT / PreparedStatement  (0) 2020.09.13
POST 방식 한글 데이터 처리 방법  (0) 2020.09.07
JSTL  (0) 2020.09.01
EL (표현언어)  (0) 2020.09.01