본문 바로가기
[ Developer ]/JSP

[JSP] JDBC 설치 및 사용

by 김현섭. 2016. 5. 22.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


JDBC 설치



sts이용해서 프로젝트를 생성한다
다운받은 파일을 WebContent -> WEB-INF -> lib 안에 넣는다


그리고 dao 안에 인터페이스를 하나 생성한다


자주 사용되는 것이라서 상수로 따로 작성함
그리고 DAO의 클래스 파일에서 코드를 작성한다

커넥션을 추가한다


위와 같이 Connection Statement ResultSet을 생성한다


그리고 오라클 DB를 사용할 것이라고 정의를 해주는 부분이 필요하다 (구현체 지정)


이제 웹을 구현할 때 throw 구문을 저렇게 작성해 준다
런타임 Exception을 통해 예외가 발생해도 예외처리 구문이 필요없게 한다


위와 같이 커넥션으로 DB를 연결한 것이다
Const에 정의되어 있는 url과 user, password를 가져온다 (간단하게 작성하기 위함)


에러가 발생하면 Surround with try/catch로 예외 처리를 해준다
throw 구문을 위에서 복사해와 catch한다


try 구문에 빨간 네모 부분 추가로 query 실행할 준비를 한다


rs (ResultSet) 추가 시 에러가 발생하는데
위의 구문에서 Statement를 PreparedStatement로 변경한다
Statement 종류에는 2가지가 있는데 PreparedStatement로 사용한다


그리고 아까 생성한 List<EmployeesVO>에 EmployeesVO 객체를 담을 준비를 한다


임시적으로 담을 VO 객체 하나 생성 후 while로 반복한다
re.next() 만나면 로우를 읽고 난 후 다음 로우로 변한다
마지막 로우를 만난다면 반복이 끝나게 된다


객체에 담기 위해서는 객체.set으로 하나의 변수들을 Set 시켜주는데
rs에서 가져오는 방식은 컬럼명을 통해서 가져올 수 있다


get변수타입으로 가져올 수 있는데 컬럼 인덱스나 컬럼이름으로 가져올 수 있다
그렇게 다른 항목들도 모두 가져올 수 있다


모든 항목들을 항목 타입에 맞게 가져와서 List에 add한다
필요에 따라서 필요한 컬럼만 추출하면 된다

# 연결 끊기
커넥션을 받을 수 있는 숫자가 제한적이기 때문에 값을 가져온 후 
연결을 끊어줘야 한다


무엇이 열려서 에러가 발생해서 어떠한 항목이 열려있는지는 체크해줘야 한다
기본값이 null이기 때문에 값 변화를 체크해서 열린 항목을 닫아주면 된다
열린 순서와는 반대로 검사를 진행한다


finally 구문을 추가해서 항목 검사한다


모든 항목을 검사하고 null이 아니라면 닫아주지만
에러가 발생해서 try~catch로 잡아야 한다
하지만 catch부분은 exception 잡아줄 필요가 없다
그리고 throw를 catch 해버리면 다른 것을 검사할 기회가 사라진다 (실행이 되지 않기 때문)

# DB 연동의 기본 패턴 *암기

  1. package com.ktds.hskim.dao;
  2.  
  3. import java.sql.Connection;
  4. import java.sql.DriverManager;
  5. import java.sql.PreparedStatement;
  6. import java.sql.ResultSet;
  7. import java.sql.SQLException;
  8. import java.util.ArrayList;
  9. import java.util.List;
  10.  
  11. import com.ktds.hskim.vo.EmployeesVO;
  12.  
  13. public class EmployeesDAO {
  14.    
  15.     public List<EmployeesVO> getAllEmployees() {
  16.        
  17.         // 구현체 지정
  18.         try {
  19.         Class.forName("oracle.jdbc.driver.OracleDriver");
  20.         } catch (ClassNotFoundException e) {
  21.             throw new RuntimeException(e.getMessage(), e);
  22.         }
  23.        
  24.         Connection conn = null;
  25.         PreparedStatement stmt = null;
  26.         ResultSet rs = null;
  27.         List<EmployeesVO> employees = new ArrayList<EmployeesVO>();
  28.        
  29.         try {
  30.             conn = DriverManager.getConnection(Const.DB_URLConst.DB_USERConst.DB_PASSWORD);
  31.            
  32.             // Query 실행할 준비
  33.             String query = " SELECT * FROM EMPLOYEES ";
  34.             stmt = conn.prepareStatement(query);
  35.            
  36.             // Query의 실행 결과를 가져옴
  37.             // Select 쿼리 일 때만 사용
  38.             rs = stmt.executeQuery();
  39.            
  40.             EmployeesVO employee = null;
  41.             while ( rs.next() ) {
  42.                 employee = new EmployeesVO();
  43.                 employee.setEmployee_Id(rs.getInt("EMPLOYEE_ID"));
  44.                 employee.setFirstName(rs.getString("First_Name"));
  45.                 employee.setLastName(rs.getNString("LAST_NAME"));
  46.                 employee.setEmail(rs.getString("EMAIL"));
  47.                 employee.setPhoneNumber(rs.getNString("PHONE_NUMBER"));
  48.                 employee.setHireDate(rs.getNString("HIRE_DATE"));
  49.                 employee.setJobId(rs.getNString("JOB_ID"));
  50.                 employee.setSalary(rs.getInt("SALARY"));
  51.                 employee.setCommissionPct(rs.getDouble("COMMISSION_PCT"));
  52.                 employee.setManagerId(rs.getInt("MANAGER_ID"));
  53.                 employee.setDepartmentId(rs.getInt("DEPARTMENT_ID"));
  54.                
  55.                 employees.add(employee);
  56.             } // Row 여러 개 : while  / Row 하나 :  if
  57.            
  58.         } catch (SQLException e) {
  59.             throw new RuntimeException(e.getMessage(), e);
  60.         }
  61.         finally {
  62.             if ( rs != null ) {
  63.                 try {
  64.                     rs.close();
  65.                 } catch (SQLException e) {
  66.                 }
  67.             }
  68.             if ( stmt != null ) {
  69.                 try {
  70.                     stmt.close();
  71.                 } catch (SQLException e) {
  72.                 }
  73.             }
  74.             if ( conn != null ) {
  75.                 try {
  76.                     conn.close();
  77.                 } catch (SQLException e) {
  78.                 }
  79.             }
  80.         }
  81.        
  82.         return employees;
  83.     }
  84.    
  85. }