사랑합니다. 편안히 잠드소서

[JAVA] DB Connection Pool for Resin

조회 수 16921 추천 수 0 2008.07.08 17:26:40

출처 : http://blog.naver.com/mcpelee/80011876740



/*---------------------------------web.conf------------------------------------*/

주석해제

    <!--
       - Sample database pool configuration
       -
       - The JDBC name is java:comp/env/jdbc/test
       -
         <database>
           <jndi-name>jdbc/mysql</jndi-name>
           <driver type="org.gjt.mm.mysql.Driver">   <!--드라이버타입-->
             <url>jdbc:mysql://localhost:3306/test</url>  <!--접속스트링-->
             <user></user>
             <password></password>
            </driver>
            <prepared-statement-cache-size>8</prepared-statement-cache-size>
            <max-connections>20</max-connections>
            <max-idle-time>30s</max-idle-time>
          </database>
      -->

/*---------------------------------Code------------------------------------*/

package db;

import java.sql.*;
import java.util.*;
import javax.naming.*;
import javax.sql.*;

 

public class DBManager {

    Connection con;
    ResultSet rs;
    PreparedStatement pstmt;

    /**
     * Connection을 생성,  Pool은 resin에서 개발된 Pool을 사용한다.
     */
    public DBManager() {
        try{
            Context envContext = (Context) new InitialContext().lookup("java:comp/env");
            DataSource poolDS = (DataSource) envContext.lookup("jdbc/oracle");
            // connection pool에서 connection을 얻어온다.
            con = poolDS.getConnection();
            // transaction 처리를 위해 false로 지정
            con.setAutoCommit(false);
        }catch(Exception e){
            // 에러가 발생할경우 Log파일에 쓴다.
        }
    }

    /**
     * Connection 객체를 리턴
     */
    public Connection getConnection() {
     return con;
    }

    /**
     * PreparedStatement 객체를 리턴
     */
    public PreparedStatement getPreparedStatement() {
 return pstmt;
    }

    /**
     * 조건이 없는 Select문을 실행하는 메소드
     * @param   sqlString  select문장
     */
    public ResultSet executeQuery(String sqlString) throws Exception{
        pstmt = con.prepareStatement(sqlString);
        rs = pstmt.executeQuery();
        con.commit();
        return rs;
    }

    /**
     * Select문을 실행하는 메소드로 select문에 조건으로 사용될 값들은 Vector로 넣어준다.
     * @param   sqlString     select문장
     * @param   paramVector   select문에 사용될 조건값들
     */
    public ResultSet executeQuery(String sqlString, Vector paramVector) throws Exception{

        pstmt = con.prepareStatement(sqlString);
        int intLoopCnt = paramVector.size();
        if (paramVector != null){
            for(int intCnt=0; intCnt < intLoopCnt; intCnt++){
                pstmt.setString(intCnt+1, (String)paramVector.elementAt(intCnt));
            }
        }
  
        rs = pstmt.executeQuery();
        con.commit();
        return rs;
    }
   
 public ResultSet executeJdbc2Query(String sqlString, Vector paramVector) throws Exception{
                                   
        pstmt = con.prepareStatement(sqlString, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
        int intLoopCnt = paramVector.size();
        if (paramVector != null){
            for(int intCnt=0; intCnt < intLoopCnt; intCnt++){
                pstmt.setString(intCnt+1, (String)paramVector.elementAt(intCnt));
            }
        }
  
        rs = pstmt.executeQuery();
        con.commit();
        return rs;
    }

    /**
     * 파라메터가 없는 문장을 실행한다.
     * @param   sqlString     select문장
     */
    public int executeUpdate(String sqlString) throws SQLException {
        pstmt = con.prepareStatement(sqlString);
        int updateCount = pstmt.executeUpdate();
        con.commit();
        return updateCount;
    }

    /**
     * Update문을 실행하는 메소드로 Update문에 사용될 값들은 Vector로 넣어준다.
     * @param   sql     select문장
     * @param   argList select문에 사용될 조건값들
     */
    public int executeUpdate(String sqlString, Vector paramVector) throws Exception{
        pstmt = con.prepareStatement(sqlString);
        int intLoopCnt = paramVector.size();

        for(int intCnt=0; intCnt<intLoopCnt; intCnt++){
     int intStringLength = ((String)paramVector.elementAt(intCnt)).length();
     if(intStringLength > 2000){
  java.io.Reader read=new java.io.StringReader((String)paramVector.elementAt(intCnt));
  pstmt.setCharacterStream(intCnt+1,read,intStringLength);
     }else{
                pstmt.setString(intCnt+1, (String)paramVector.elementAt(intCnt));
     }
        }

        return pstmt.executeUpdate();
    }

    public void commit() throws SQLException{
        if(con != null) {
            con.commit();
        }
    }

    public void rollback() throws SQLException{
        if(con != null){
            con.rollback();
        }
    }

    /**
     * 프로시져를 호출하는 메소드 (파라미터가 없을경우)
  * 
     *  @param String  프로시져 이름
     */
 public String execProcedure(String procNameString) throws Exception{
  CallableStatement proc = null;
  proc = con.prepareCall("{call " + procNameString + "(?)}");
  proc.registerOutParameter(1, java.sql.Types.VARCHAR);
  proc.execute();

  return proc.getString(1);
 }

    /**
     * 프로시져를 호출하는 메소드 (파라미터가 있을경우)
  * 
     *  @param String  프로시져 이름
     */
 public String execProcedure(String procNameString, Vector argVector) throws Exception{
  CallableStatement proc = null;

  String paramString   = "";
  String errMessageString = "";
  int intParamCount   = 0;

  if((argVector != null) && argVector.size() > 0) intParamCount = argVector.size();
  
  if(intParamCount == 0){
   proc = con.prepareCall("{call " + procNameString + "(?)}");
   proc.registerOutParameter(1, java.sql.Types.VARCHAR);
   proc.execute();

   return proc.getString(1);

  }else{
   for(int intLoop=0; intLoop<intParamCount; intLoop++){
    if(intLoop == 0) 
     paramString = "?";
    else
     paramString = paramString + ",?";
   }  

   proc = con.prepareCall("{call " + procNameString + "(" + paramString + ",?)}");
   int intLoop = 0;
   for(intLoop=0; intLoop<intParamCount; intLoop++)
    proc.setString(intLoop+1,  (String)argVector.elementAt(intLoop));

   proc.registerOutParameter(intLoop+1, java.sql.Types.VARCHAR);
   proc.execute();

   return proc.getString(intLoop+1);
  }
 }

 /**
     * Connection, ResultSet, PreparedStatement를 close한다.
     * @param
     */
    public void close(){
        try{
  if(pstmt != null) {
   pstmt.close();
  }
 } catch(Exception e){
            // Exception을 파일에 쓴다.
        }
        try{
  if(rs != null) {
   rs.close();
  }
 } catch(Exception e){
            // Exception을 파일에 쓴다.
        }
        try{ 
  if(con != null) {
   con.close();
  }
 } catch(Exception e){
            // Exception을 파일에 쓴다.
        }
    }
}



블로그코리아에 블UP하기
List of Articles
번호 제목 글쓴이 날짜 조회 수
44 [JAVA] JDBC Driver 로딩시 java.lang.ClassNotFoundException문제 [레벨:30]id: 그녀의남자그녀의남자 2009-03-04 24641
43 openfire admin 암호 복구방법. [레벨:30]id: 그녀의남자그녀의남자 2009-03-04 15450
42 Action Script & Flex Class Diagram file [2] [레벨:30]id: 그녀의남자그녀의남자 2009-03-02 21858
41 Windows NT 계열 Oracle Memory 구조 [레벨:30]id: 그녀의남자그녀의남자 2009-03-02 16175
40 SMTP 553 5.7.1 sorry, that domain isn't in my list of allowed rcpthosts (chkuser) [레벨:30]id: 그녀의남자그녀의남자 2009-02-23 21516
39 윈도우 서비스 제거 방법 [레벨:30]id: 그녀의남자그녀의남자 2009-02-20 14210
38 [Flex] RSS 로드시 한글 깨지는 현상 방지. [레벨:30]id: 그녀의남자그녀의남자 2009-01-03 11663
37 [Flex] Crossdomain 설정 file [3] [레벨:30]id: 그녀의남자그녀의남자 2008-12-26 19474
36 VS2008 Uninstall 에러 "vs_setup.msi cannot be opened" [레벨:7]와이키키 2008-12-02 14851
35 Windows 환경변수 백업하기. [2] [레벨:30]id: 그녀의남자그녀의남자 2008-10-21 11387
34 [VC++] Recompile module error 발생. [레벨:30]id: 그녀의남자그녀의남자 2008-10-06 12240
33 [JAVA] Interface 와 abstract [레벨:30]id: 그녀의남자그녀의남자 2008-07-30 19178
32 NTLDR Is Missing 오류 대처법 2탄 [레벨:30]id: 그녀의남자그녀의남자 2008-07-16 11194
31 NTLDR Is Missing 오류 대처법 [레벨:30]id: 그녀의남자그녀의남자 2008-07-15 41954
30 페도라 한글 설정 [레벨:7]와이키키 2008-07-10 123829
29 [JAVA] File과 Directory 접근 [레벨:30]id: 그녀의남자그녀의남자 2008-07-08 26711
» [JAVA] DB Connection Pool for Resin [레벨:30]id: 그녀의남자그녀의남자 2008-07-08 16921
27 [JAVA] 트리플 DES 클래스 [레벨:30]id: 그녀의남자그녀의남자 2008-07-08 13775
26 [JAVA] 자바 보안과 암호화 [레벨:30]id: 그녀의남자그녀의남자 2008-07-08 23762
25 [Mysql] Mysql 에러코드 [1] [레벨:30]id: 그녀의남자그녀의남자 2008-07-08 322190


미디어협동조합 국민TV