본문 바로가기

Oracle/OracleConnectionPool

OracleConnectionPool

Oracle에서 제공하는 Connection Pooling 예제
테스트환경: Oracle 10g, JDK6.0, ojdbc14.jar


Connection Pool로부터 Connection을 얻어내는 예

package test;

import java.sql.Connection;
import javax.sql.PooledConnection;
import oracle.jdbc.pool.OracleConnectionPoolDataSource;

public class OraclePoolTest {

 public static void main(String[] args) throws Exception{

        try {
              OracleConnectionPoolDataSource ocpds = new OracleConnectionPoolDataSource();
              ocpds.setURL("jdbc:oracle:thin:@localhost:1521:orcl");
              ocpds.setUser("scott");
              ocpds.setPassword("tiger");
              // Create a pooled connection
              PooledConnection pc  = ocpds.getPooledConnection();
              // Get a Logical connection
              Connection con = pc.getConnection();
              //con을 사용하여 필요한 작업을 한다

              //con을 사용한 후에는.....
              con.close();
              pc.close();

        } catch (ClassNotFoundException e) {
              e.printStackTrace();
        }
 }
}



 얻어낸 Connection을 사용하고 닫는 절차

 package test;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.sql.PooledConnection;
import oracle.jdbc.pool.OracleConnectionPoolDataSource;

public class OraclePoolTest {

 public static void main(String[] args) throws Exception{

        try {
              OracleConnectionPoolDataSource ocpds = new OracleConnectionPoolDataSource();
              ocpds.setURL("jdbc:oracle:thin:@localhost:1521:orcl");
              ocpds.setUser("scott");
              ocpds.setPassword("tiger");
              // Create a pooled connection
              PooledConnection pc  = ocpds.getPooledConnection();
              // Get a Logical connection
              Connection con = pc.getConnection();
              Statement stmt = con.createStatement();
              String sql = "select ename from emp where empno=7369";
              ResultSet rs = stmt.executeQuery(sql);
              if(rs.next()){
               String ename = rs.getString("ENAME");
               System.out.println("ENAME: "+ename);
              }

              con.close();
              pc.close();

        } catch (Exception e) {
              e.printStackTrace();
        }
 }
}




 Stored Procedure를 실행하는 예

/* 다음과 같이 Stored Procedure를 생성한 후에 이 클래스를 테스트한다.
 create or replace PROCEDURE proc3
 (dept_no IN emp.deptno%TYPE,
 empcsr OUT SYS_REFCURSOR
 )
 is
 begin
 --CURSOR 타입변수에 데이터를 저장하는 방법이 특이하므로 주의요망
 open empcsr for select * from emp where deptno=dept_no;
 end proc3;
 /

 */

package test;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import javax.sql.PooledConnection;

import oracle.jdbc.OracleTypes;
import oracle.jdbc.pool.OracleConnectionPoolDataSource;

public class OraclePoolTest {

 public static void main(String[] args) throws Exception{

        try {
              OracleConnectionPoolDataSource ocpds = new OracleConnectionPoolDataSource();
              ocpds.setURL("jdbc:oracle:thin:@localhost:1521:orcl");
              ocpds.setUser("scott");
              ocpds.setPassword("tiger");
              // Create a pooled connection
              PooledConnection pc  = ocpds.getPooledConnection();
              // Get a Logical connection
              Connection con = pc.getConnection();
              CallableStatement cstmt = con.prepareCall("{call proc3(?,?)}");
             
              cstmt.setInt(1, 30);
              cstmt.registerOutParameter(2, OracleTypes.CURSOR);
              cstmt.executeQuery();
             
              ResultSet rs = (ResultSet)cstmt.getObject(2);
              while(rs.next()){
               int empno = rs.getInt("EMPNO");
               String ename = rs.getString("ENAME");
               int sal = rs.getInt("SAL");
               System.out.println("사번:"+empno+ " 이름:"+ename+ " 급여:"+sal);
              }
              rs.close();
              con.close();
              cstmt.close();
              pc.close();

        } catch (Exception e) {
              e.printStackTrace();
        }
 }
}