자바(java) 기초 7편.

Connection Pool
 *   : Connection을 반드시 연결해야 되는데 Connection을 맺는 시간이 많이 걸린다.
 *    예> dept를 select ==> 10초가 걸렸다.
 *         ==> Connection 맺는 시간이 8초.
 *   ==> 미리 처음에 Connection을 4개 정도를 미리 맺어서
 *    특정 클래스(Connection Pool)에 저장한다.
 *    필요하면 특정클래스에 메소드를 호출해서 Connection을 얻어서 사용한다.
 *    사용한 후에 반드시 돌려줘야 한다.

Connection Pool 기능
 *  : http://jakarta.apache.org 에서 무료로 다운
 *
 *
 *  EX>
 * package Connection.pool;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import org.apache.commons.dbcp.BasicDataSource;

public class PoolDAO {
 
 String driver = “oracle.jdbc.driver.OracleDriver”;
 String url = “jdbc:oracle:thin:@localhost:1521:orcl”;
 String user = “scott”;
 String password = “tiger”;
 BasicDataSource ds; //내부적으로 pool 기능 포함
 
 public PoolDAO(){
  ds = new BasicDataSource();
     ds.setDriverClassName(driver);
     ds.setUsername(user);
     ds.setPassword(password);
     ds.setUrl(url);
     ds.setInitialSize(4); //초기 커넥션 생성 갯수
     //ds.setMaxActive(4); //최대 쓸수있는 커녁센 갯수
 }//생성자
 
 //select
 public ArrayList<DeptDTO> select(){
  Connection conn=null;
  PreparedStatement pstmt=null;
  ResultSet rs=null;
  ArrayList<DeptDTO> articleList=null;
  try{
   conn=ds.getConnection();
   String sql=”select * from dept”;
   pstmt=conn.prepareStatement(sql);
   rs=pstmt.executeQuery();
   
   if(rs.next()){
    articleList=new ArrayList<DeptDTO>();
    while(rs.next()){
     DeptDTO dto = new DeptDTO();
     dto.setDeptno(rs.getInt(“deptno”));
     dto.setDname(rs.getString(“dname”));
     dto.setLoc(rs.getString(“loc”));
     
     articleList.add(dto);
    }
    
    System.out.println(“일하는애>>”+ds.getNumActive());//지금 사용되고있는 숫자
    System.out.println(“노는애>>”+ds.getNumIdle());//지금 쉬고있는 숫자
   }
  }catch(Exception e){
   e.printStackTrace();
  }finally{
   if(rs!=null)try{rs.close();}catch(Exception e){}
   if(pstmt!=null)try{pstmt.close();}catch(Exception e){}
   if(conn!=null)try{conn.close();}catch(Exception e){}
  }
  
  return articleList;
 }
}

 *

자바의 트랜젝션 처리
 *  고객삭제?
 *   – customer table에서 고객삭제
 *   – shares 테이블에서 삭제된 고객의 주식 삭제
 *
 *   기존 : auto커밋이 되어있다.
 *    try{
 *     deleteMember(ssn);
 *     deleteShares(ssn);
 *    }catch(Exception e){}
 *
 *   변경 : auto커밋을 해제한다.
 *    try{
 *     conn.setAutoCommit(false); //오토커밋해제
 *     deleteMember(ssn);
 *     deleteShares(ssn);
 *     conn.commit(); //커밋한다.
 *    }catch(Exception e){
 *     conn.rollback();
 *    }finally{
 *     conn.setAutoCommit(true); //오토커밋사용
 *    }
 *

관련 글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다