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); //오토커밋사용
* }
*