/*
Connection Pool이 운용되는 개념을 학습하기 위해 다음과 같은 간단한 프로그램을 작성해 본다
프로그램이 시작되면서 미리 Connection을 5개 생성해서 Vector에 저장해 놓는다.
Emp테이블에 연속해서 100회 접속해서 모든 사원의 정보를 가져오는 로직을 작성한다.
이때 위에서 생성한 Connection Pool로부터 Connection을 꺼내어 사용하고,
작업한 후에는 Connection Pool에 다시 돌려 보낸다.
성능시험: Emp테이블에 접속을 시작해서 100회 작업이 종료된 시간을 측정해 본다.
*/
import java.sql.*;
import java.util.*;
class ConnPoolTest {
static Vector<Connection> pool = new Vector<Connection>();
public static void main(String[] args) throws Exception {
// Connection Pool을 사용하는 경우
/*
initPool(); // Connection 이 5개 생성되어 풀에 저장됨
Connection inuseConn = null;
Connection returnedConn = null;
long start = System.currentTimeMillis();
for(int i=0;i<100;i++) {
inuseConn = pool.get(0);
pool.remove(inuseConn);
returnedConn = getAllEmp(inuseConn);
pool.add(returnedConn);
}
long end = System.currentTimeMillis();
long diff = end-start;
System.out.println("\n총 소요시간:"+diff);
*/
// Connection Pool을 이용하지 않은 경우
long start = System.currentTimeMillis();
for(int i=0;i<100;i++) {
Connection conn = getAllEmp(getConnection());
conn.close();
}
long end = System.currentTimeMillis();
long diff = end-start;
System.out.println("\n총 소요시간:"+diff+"(ms)");
}
static void initPool() throws Exception {
for(int i=0;i<5;i++) {
pool.add(getConnection());
}
System.out.println(pool.size()+"개의 Connection 준비됨");
}
static Connection getAllEmp(Connection conn) throws Exception {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from emp");
rs.next();
String ename = rs.getString("ename");
System.out.print(ename+ " ");
rs.close();
stmt.close();
return conn;
}
static Connection getConnection() {
try {
DriverManager.registerDriver( new oracle.jdbc.OracleDriver() );
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL",
"scott","tiger" );
return conn;
}catch(Exception e){e.printStackTrace();}
return null;
}
}