JDBC를 통하여 DB에 연결하기 위해서는 매번 드라이버를 로드하고 커넥션 객체를 생성하여 연결하고 종료하기 때문에 비효율적임
<기존코드>
//Oracle DB에 연결하고 select, insert, update, delete작업을 실행하는 클래스
Public class MemberDAO{
//오라클에 접속하는 소스를 작성
String id = "system"; //접속아이디
String pass = "123456"; //접속비밀번호
String url = "jdbc:oracle:thin:@localhost:1521:XE"; //접속url
Connection con; //데이터베이스에 접근할 수 있도록 설정
PreparedStatement pstmt; //데이터베이스에서 쿼리를 실행시켜주는 객체
ResultSet rs; //데이터베이스의 테이블의 결과를 리턴받아 자바에 저장해주는 객체
//데이터베이스에 접근할 수 있또록 도와주는 메소드
public void getCon(){
try{
//1.해당 데이터 베이스를 사용한다고 선언(클래스를 등록=오라클을 사용)
Class.forName("oracle.jdbc.driver.OracleDriver");
//2.해당 데이터 베이스에 접속
con = DriverManager.getConenction(url, id, pass);
} catch(Exception e) {
//TODO : handle exception
}
}
DB와 연결된 커넥션 객체를 미리 풀(pool)에 생성해놓고 필요할 때 가져다 쓰고 반환
<커넥션 풀 사용 코드>
1.server.xml - source탭 - 연결을 원하는 프로젝트의 태그안에 코드 입력하여 커넥션풀 세팅
<Context docBase="DataBase" path="/DataBase" reloadable= "true"
source="org.eclipse.jst.jee.server:DataBase">
<Resource name ="jdbc/pool" auth="Container" type="javax.sql.DataSource"
driverClassName ="oracle.jdbc.driver.OracleDriver" loginTimeout="10"
maxWait="5000" username="system" password="123456"
url="jdbc:oracle:thin:@localhost:1521:xe"/>
</Context>
2.DAO클래스에서 커넥션 풀을 이용하여 DB에 접근
Public class MemberDAO{
Connection con; //데이터베이스에 접근할 수 있도록 설정
PreparedStatement pstmt; //데이터베이스에서 쿼리를 실행시켜주는 객체
ResultSet rs; //데이터베이스의 테이블의 결과를 리턴받아 자바에 저장해주는 객체
//데이터베이스에 접근할 수 있또록 도와주는 메소드
public void getCon(){
//커넥션 풀을 이용하여 데이터 베이스에 접근
try {
//외부에서 데이터를 읽어들여야 하기에
Context initctx = new InitialContext();
//톰캣 서버에 정보를 담아놓은 곳으로 이동
Context envctx = initctx.lookup("java:comp/env");
//데이터 소스 객체를 선언
DataSource ds = envctx.lookup("jdbc/pool");
//데이터 소스를 기준으로 커넥션을 연결
con = ds.getConnection();
} catch (Exception e) {
e.printStackTrace();
}