과거 Tomcat 5.0 버전 까지는 커넥션 풀링을 구현하려면, DBCP, Collections, Pool library를 각각 설치해야 했지만, 자카르타 톰캣에서는 다음과 같이 하나의 라이브러리로 제공하고 있다.


Tomcat5.5의 경우 톰캣경로 /common/lib/naming-factory-dbcp.jar

Tomcat6.0의 경우 톰캣경로 /lib/tomcat-dbcp.jar


테스트환경

==============

Oracle 11g

Tomcat 6.0

Eclipse

==============





1. Context configuration


Tomcat Server - server.xml 설정

<Resource name="jdbc/myoracle" auth="Container"

                  type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"

                  url="jdbc:oracle:thin:@127.0.0.1:1521:orcl"

                  username="scott" password="비밀번호" maxActive="20" maxIdle="10"

                  maxWait="-1"/>


2. web.xml configuration

[출처] Oracle DBCP Connection pool Eclipse환경|작성자 bench87


Project - web.xml 설정

<web-app>

....


<resource-ref>

                     <description>Oracle Datasource example</description>

                     <res-ref-name>jdbc/myoracle</res-ref-name>

                     <res-type>javax.sql.DataSource</res-type>

                     <res-auth>Container</res-auth>

</resource-ref>


</web-app


3. Code example


text page 작성 - jdbc6.0.jsp

<%@ page import="javax.naming.*,

                 java.sql.*,

                 javax.sql.*"  %>

<%

response.setContentType("text/html;");


Connection conn= null;

Statement stmt = null;

ResultSet rs   = null;


try {

    Context initContext = new InitialContext();

    Context envContext  = (Context)initContext.lookup("java:/comp/env");

    DataSource ds = (DataSource)envContext.lookup("jdbc/oracleDB");

    System.out.println("[DataSource] :: " + ds.toString());

    conn = ds.getConnection();


   

    // 

    stmt = conn.createStatement();


    // ResultSet 

    String query =

        "SELECT * FROM TEMPLET";

    rs = stmt.executeQuery(query);

%><table border="1" cellspacing="0">

<tr>

<td>Seq</td>

<td>Str1</td>

<td>Str2</td>

</tr>

<%

    while(rs.next()) {

%><tr>

<td><%=rs.getInt(1)%></td>

<td><%=rs.getString(2)%></td>

<td><%=rs.getString(3)%></td>

</tr>

<%

    } // end while

%></table><%


    rs.close();



    stmt.close();


} catch (SQLException e) {

    out.println("err:"+e.toString());

} finally {

   // conn.close();

}

%>

'Server Enterprise > JDBC & DBCP' 카테고리의 다른 글

PreparedStatement 객체 재사용하기  (0) 2016.06.22
[Oracle] JDBC Connection  (0) 2013.07.17
DBCP 에서 JNDI 설정 방법  (0) 2012.07.20

Unique Key를 생성하는 방법은 DBMS마다 차이가 있다.
MS-SQL은 IDENTITY를, MySQL은 auto_increment와 같이 쉽게 사용할 수 있는 방법이 있는데 오라클에서는 Sequence를 사용하여 다음과 같이 유사하게 구현할 수 있다


------------------------------------------------------------------------------------------

1. 자동증가컬럼을 사용하고자 하는 MYTABLE테이블을 생성한다.


       CREATE TABLE MYTABLE
               (ID NUMBER, NAME VARCHAR2(20));


2. CREATE SEQUENCE 라는 문장을 사용하여 SEQ_ID라는 이름의 시퀀스를 만든다.


       CREATE SEQUENCE SEQ_ID INCREMENT BY 1 START WITH 10000;

      -- INCREMENT BY 1 : 증가값은 1
      -- START WITH 10000 :  10000부터 증가


3.  테이블에 데이터 입력시에는 NEXTVAL이라는 슈도 칼럼(Pseudo-column)을 이용하여 시퀸스를 사용한다.


       INSERT INTO MYTABLE VALUES( SEQ_ID.NEXTVAL, '홍길동');

       -- CURRVAL : 현재 값을 반환 합니다. . 
       -- NEXTVAL : 현재 시퀀스값의 다음 값을 반환 합니다. 


------------------------------------------------------------------------------------------

sequence와 trigger를 통해서 auto-increment를 생성 할 수 있다.


먼저, auto-increment를 시행해볼 table을 만든다.


CREATE TABLE templet(

seq NUMBER PRIMARY KEY,

str1 VARCHAR2(256) NOT NULL,

str2 VARCHAR2(256) NOT null

)


seq가 1로부터 시작해서 1씩 증가할 수 있도록 sequence를 생성한다. 


CREATE SEQUENCE templet_sequence

START WITH 1

INCREMENT BY 1;


테이블에 insert 할 때마다 seq column에 이 sequence 를 적용시킬 수 있도록 trigger를 걸어보도록 하자.


CREATE OR REPLACE TRIGGER templet_trigger

BEFORE INSERT

ON templet

REFERENCING NEW AS NEW

FOR EACH ROW

BEGIN

SELECT TEMPLET_SEQUENCE.NEXTVAL INTO :new.seq FROM dual;

END;


이제 테이블에 새로운 row가 insert 될 때마다 이 test_trigger가 실행될 것이고, 결과적으로 seq가 자동으로 1씩 증가하게 된다.

+ Recent posts