작성자 : shin-gosoo(hchshin@chol.com)
작성일 : 2007.05.21
새창 보기
초보자를 위한 JDBC를 위한 환경설정 및 실습 1탄입니다. (톰캣 , My-sql 환경하에서)
이번 강의를 위해 사전에 설치할 것들
톰캣 설치(5.0.28)
Mysql 설치(5.0.x)
WTP 설치(1.5.3)
목차
JDBC 드라이버 설치
기본 연결방법
DB Pooling을 통한 연결방법
실습예제 다운로드
1. JDBC 드라이버 설치
JDBC 드라이브 설치 : Mysql용 Connector/J 5.0.6 (8.3M) (2007.05.21 현재 최신 버전)
다운로드 URL :
http://www.mysql.org/downloads/connector/j/5.0.html
mysql-connector-java-5.0.6.zip (8.3M) 를 다운로드 받는다.
mysql-connector-java-5.0.6.zip 를 압축푼 후 mysql-connector-java-5.0.6-bin.jar를 D:\dev\jakarta-tomcat-5.0.28\common\lib 에 복사하면 된다.
2. 기본 연결방법
예제 (ex1.jsp)
<%@ page language="java" contentType="text/html; charset=MS949" %> <%@ page import="java.sql.*" %> <%@ page import="java.text.*" %> <%@ page import="java.util.*" %> <%! private Connection getConnection() throws Exception { String URL="jdbc:mysql://localhost:3306/myproject_kr?useUnicode=true&characterEncoding=euckr"; String id="javamaster"; String pw="1234"; Class.forName("com.mysql.jdbc.Driver"); return DriverManager.getConnection(URL, id, pw); } private List getInfo() throws Exception { List list = new ArrayList(); Connection con = null; Statement stmt = null; ResultSet rs = null; try{ con = getConnection(); stmt = con.createStatement(); rs = stmt.executeQuery("show databases"); while(rs.next()){ list.add(rs.getString(1)); } }finally{ if (rs!=null) { try{ rs.close(); } catch(Exception ignored){} } if (stmt!=null) { try{ stmt.close(); } catch(Exception ignored){} } if (con!=null) { try{ con.close(); } catch(Exception ignored){} } } return list; } %>
<% long stime = System.currentTimeMillis(); List list = getInfo(); for (int i=0; i < list.size(); i++){ String row = (String)list.get(i); out.println(row); out.println("
"); } long etime = System.currentTimeMillis(); double elapsed = (etime-stime)/1000.0; %>
Elapsed Time : <%=NumberFormat.getInstance().format(elapsed)%> sec
JDBC를 통한 기본적인 연결 예제임.
8라인부터 18라인까지의 getConnection() 이 디비 커넥션 객체를 얻기 위한 메소드임.
실무에서 위와 같이 디비 풀링을 쓰지 않고 직접 커넥션을 얻는 방식은 지양 해야 함.
위 예제는 간단히 커넥션을 얻어서 mysql database들의 리스트를 화면에 보여주는 예제임.
3. DB Pooling을 통한 연결방법
톰캣 설정방법
톰캣설치는
여기
를 참조하세요.
D:\dev\jakarta-tomcat-5.0.28\conf\Catalina\localhost\jdbc_ex1.xml 생성 (Context path : jdbc_ex1)
factory
org.apache.commons.dbcp.BasicDataSourceFactory
maxActive
5
maxIdle
5
maxWait
10000
username
javamaster
password
1234
driverClassName
com.mysql.jdbc.Driver
url
jdbc:mysql://localhost:3306/myproject_kr?useUnicode=true&characterEncoding=euckr
1라인의 path 및 docBase 는 자기가 원하는 디렉토리에 위치시켜도 됨.
필자의 실습 예제를 따라 할려면 상단의 "이번 강의를 위해 사전에 설치할 것들" 을 참조하기 바랍니다.
8라인의 Resource name이 참조할 JNDI 명임.
8라인의 Resource name과 12라인의 ResourceParams name 이 같아야 함.
나머지는 특별히 설명할 필요가 없을것 같고, 20라인의 maxActive 로 5로 설정하였는데 이것은 최대 연결할 수 있는 커넥션 갯수임.
즉 동시 사용자가 많더라도 풀링에 5개의 커넥션밖에 없으므로 나머지 요청은 커넥션이 반납되어 사용할 수 있을때까지 대기해야 함.
동시 사용자가 많다면 시스템의 환경을 고려하여 충분히 올려주면 됨. 최대 커넥션 갯수의 제한을 없게 할려면 0으로 설정하면 되는데 이렇게 하면 안되겠지요? ^^
예제 (ex2.jsp)
<%@ page language="java" contentType="text/html; charset=MS949" %> <%@ page import="java.sql.*" %> <%@ page import="java.text.*" %> <%@ page import="java.util.*" %> <%@ page import="javax.sql.DataSource"%> <%@ page import="javax.naming.Context"%> <%@ page import="javax.naming.InitialContext"%> <%! private Connection getConnection() throws Exception { Context initContext = new InitialContext(); Context envContext = (Context)initContext.lookup("java:/comp/env"); DataSource ds = (DataSource)envContext.lookup("jdbc/myDS"); return ds.getConnection(); } private List getInfo() throws Exception { List list = new ArrayList(); Connection con = null; Statement stmt = null; ResultSet rs = null; try{ con = getConnection(); stmt = con.createStatement(); rs = stmt.executeQuery("show databases"); while(rs.next()){ list.add(rs.getString(1)); } }finally{ if (rs!=null) { try{ rs.close(); } catch(Exception ignored){} } if (stmt!=null) { try{ stmt.close(); } catch(Exception ignored){} } if (con!=null) { try{ con.close(); } catch(Exception ignored){} } } return list; } %>
<% long stime = System.currentTimeMillis(); List list = getInfo(); for (int i=0; i < list.size(); i++){ String row = (String)list.get(i); out.println(row); out.println("
"); } long etime = System.currentTimeMillis(); double elapsed = (etime-stime)/1000.0; %>
Elapsed Time : <%=NumberFormat.getInstance().format(elapsed)%> sec
Tomcat에서 기본적으로 제공하는 dbcp DB Pooling를 통한 연결 예제임.
10라인부터 20라인까지의 getConnection() 이 디비 커넥션 객체를 얻기 위한 메소드임.
14라인의 JNDI lookup 시 "java:/comp/env" 를 이용하였는데, 이것은 톰캣방식이며, 다른 WAS 서버는 조금씩 다름.
16라인의 "jdbc/myDS" 톰캣 환경설정에서 설정한 JNDI 명(Resource name)임.
위 예제는 디비 풀링 통해 커넥션을 얻은 뒤 mysql database들의 리스트를 화면에 보여주는 예제임.