• Home
  • About
    • ming photo

      ming

      studying

    • Learn More
    • Twitter
    • Facebook
    • Instagram
    • Github
    • Steam
  • Archive
    • All Posts
    • All Tags
    • All categories
  • categories
    • HTML+CSS+JavaScript
    • JAVA
    • Algorithm
    • DB
    • JSP
    • 정보처리기사
    • Spring
    • Thymeleaf
    • 기술면접
  • Projects

JAVA -JDBC 프로그래밍 - DB연결/해제(타입별), DbUtil 클래스 단위테스트

10 Mar 2021

🔷JDBC 프로그래밍 - DB연결/해제(타입별), DbUtil 클래스 단위테스트

  • DB연결/해제(타입별)
      package com.javateam.jdbc.member.util;
    
      import java.sql.Connection;
      import java.sql.DriverManager;
      import java.sql.SQLException;
      import java.sql.Statement;
      import java.sql.ResultSet;
    
      /**
      * DB 연결/해제 유틸리티(Utility)
      * <br><br>
      * usage (사용 용례)
      * <br>
      * DB 연결 : DbUtil.connect();
      * DB 연결 해제시 : DbUtil.close(con, pstmt, rs);
      * 
      * @author mingki
      * @version 1.0
      * 
      */
    
      public class DbUtil {
            
          /** DB 연결 정보 */
            
          /** JDBC 드라이버(driver) */
          static final String DRIVER = "oracle.jdbc.OracleDriver";
          // static final String driver = "oracle.jdbc.driver.OracleDriver"; (O)
            
          /** JDBC URL */	
          static final String URL = "jdbc:oracle:thin:@localhost:1521:xe";
            
          /** DB account(ID) */
          static final String USER_ID = "java";
            
          /** DB account(PW) */
          static final String USER_PW = "java";
            
          /** 
            
          /**
          * 역할 : DB 연결
          * <br><br>
          * 용례 : DbUtil.connect();
          * <br>
          * @return DB 연결 객체
          */
            
          // 함수 생성(인자)
          // Connection : jdbc 연결
          public static Connection connect() {
                
              /** DB 연결 객체 */
              Connection con = null;
                
              // JDBC driver 등록
              try {
                  Class.forName(DRIVER);	
                    
                  // JDBC URL, ID, PW 를 이용해 연결 객체 생성
                  try {				
                        
                      con = DriverManager.getConnection(URL, USER_ID, USER_PW); 
                        
                  } catch (SQLException e) {
                      System.out.println("DB 연결에 실패하였습니다.");
                      e.printStackTrace();
                  }
                    
              } catch (ClassNotFoundException e) {
                  System.out.println("JDBC 드라이버 로딩에 실패하였습니다.");
                  e.printStackTrace();
              }		
              return con;
          }
          /**
          * DB 연결 해제(자원 반납)
          * <br><br>
          *  용례) DbUtil.connect(con, pstmt, rs); // select
          *  	 DbUtil.connect(con, pstmt, null); // insert, update, delete
          *  <br>
          * @param con  : DB 연결 객체
          * @param stmt : stmt SQL 처리 객체
          * @param rs : SQL 결과셋 객체
          */
            
          // 반환값이 없을 때 (void)
          public static void close(Connection con, Statement stmt, ResultSet rs) {
                
              try {
                  if(rs != null) {
                      rs.close();
                      System.out.println("SQL 결과셋을 반납하였습니다.");
                  }// if(!rs.isClosed()) rs.close(); // (O)
                  // if(rs.isClosed() == false) rs.close(); // (O)
                  if(stmt != null) {
                      stmt.close();
                      System.out.println("SQL 처리 객체를 반납하였습니다.");
                  }
                  // if(stmt.isClose() == false) stmt.close(); // (O)
                  if(con != null) {
                      con.close();
                      System.out.println("DB 연결 객체를 반납하였습니다.");
    
                  }
                  // if(con.isClosed()==false) con.close(); // (O)
              } catch (SQLException e) {
                  System.out.println("DB 자원 반납에 실패하였습니다.");
                  e.printStackTrace();
                    
              }
                
          }
              // 반환값 boolean 일 때
          public static boolean close(Connection con, Statement stmt, ResultSet rs) {
                
              boolean result = false;
                
              try {
                  if(rs != null) {
                      rs.close();
                      System.out.println("SQL 결과셋을 반납하였습니다.");
                      result = true;
                  }
                  if(stmt != null) {
                      stmt.close();
                      System.out.println("SQL 처리 객체를 반납하였습니다.");
                      result = true;
                  }
                  if(con != null) {
                      con.close();
                      System.out.println("DB 연결 객체를 반납하였습니다.");
                      result = true;
    
                  }
                  // if(con.isClosed()==false) con.close(); // (O)
              } catch (SQLException e) {
                  System.out.println("DB 자원 반납에 실패하였습니다.");
                  e.printStackTrace();
                  result = false;
                    
              }
                
              return result;
          }
            
              // 반환 값 String 일 때
              public static String close(Connection con, Statement stmt, ResultSet rs) {
                
              String result = "";
                
              try {
                  if(rs != null) {
                      rs.close();
                      result +="SQL 결과셋을 반납하였습니다.\n";
                  }
                  if(stmt != null) {
                      stmt.close();
                      result +="SQL 처리 객체를 반납하였습니다.\n";
                  }
                  if(con != null) {
                      con.close();
                      result +="DB 연결 객체를 반납하였습니다.\n";	
                  }
              } catch (SQLException e) {
                  System.out.println("DB 자원 반납에 실패하였습니다.");
                  e.printStackTrace();
                    
              }
                
              return result;
          }
            
          // 반환 값 int 일 때 
          public static int close(Connection con, Statement stmt, ResultSet rs) {
                    
                  int result = 0;
                    
                  try {
                      if(rs != null) {
                          rs.close();
                          result = 1;
                      }
                      if(stmt != null) {
                          stmt.close();
                          result = 2;
                      }
                      if(con != null) {
                          con.close();
                          result = 3;	
                      }
                  } catch (SQLException e) {
                      System.out.println("DB 자원 반납에 실패하였습니다.");
                      e.printStackTrace();
                  }
                  return result;
              }
      }
    
  • 단위테스트
      package com.javateam.jdbc.member.test;
    
      import java.sql.Connection;
      import java.sql.ResultSet;
      import java.sql.SQLException;
      import java.sql.Statement;
    
      import com.javateam.jdbc.member.util.DbUtil;
      /**
      * DbUtil 단위 테스트(Unit Test) : 테스트 케이스(Test Case)
      * 
      * 테스트 조건)
      * 
      * 1) DB 연결 테스트
      * 
      * 2) DB 연결 자원 반납(해제) 테스트
      * 
      * @author mingki
      *
      */
      public class DbConnectionTest {
    
          public static void main(String[] args) throws SQLException {
                
              // 테스트 결과 => 단언(단정) : assertion
              String msg = DbUtil.connect() != null ? "DB 연결 성공" : "DB 연결 실패" ; // void
              System.out.println("연결 성공 여부 : " + msg);
                
              // statement 테스트
              Connection con = DbUtil.connect();
              Statement stmt = con.createStatement();
              ResultSet rs = stmt.executeQuery("SELECT * FROM member");
                
              DbUtil.close(DbUtil.connect(), stmt, null); 
                
               boolean result = DbUtil.close(DbUtil.connect(), stmt, null); // boolean
              System.out.println("반납 성공 여부 : " + result);
                
      		String result = DbUtil.close(DbUtil.connect(), stmt, rs); // String
      		System.out.println("반납 성공 여부(메세지) :\n " + result);
                
              int result = DbUtil.close(DbUtil.connect(), stmt, rs); // int
              String msg = 
              result == 1 ? "SQL 처리 객체를 반납하였습니다. " :			
              result == 3 ? "DB 연결 객체까지 반납하였습니다." :					
              result == 6 ? "DB 자원까지 실패하였습니다." : "";
              System.out.println("반납 성공 여부(메세지) : " + msg);
          }
    
      }
    


Share Tweet +1