Transcript lecture-10

데이터베이스 사용하기
JSP & Servlet
Contents
 학습 목표
 데이터베이스를 이용하면 파일보다 훨씬 더 체계적이고 구조적인 방법으
로 데이터를 저장하고 관리할 수 있다. 그래서 웹 프로그래밍에서도 데이
터베이스를 사용해야 할 경우가 많이 있는데 이번 장에서는 그 방법을 배
워보자.
내 용
 데이터베이스에 대하여
 MySQL 설치하기
 Connector/J 설치하기
 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 데이터베이스 커넥션 풀의 설치와 사용
2/80
1. 데이터베이스 사용
 데이터베이스(database)
• 파일과 마찬가지로 보조기억장치에 데이터를 저장하는 수단
• 크게 계층형 데이터베이스, 관계형 데이터베이스, 객체지향 데이터베이스로 구분
• 그 중 관계형 테이터베이스인 MySQL을 사용
 자바 프로그램에서 MySQL을 사용하려면 JDBC 드라이버가 필요하다.
[그림 12-1] JDBC 드라이버의 역할
3/90
2. MySQL 설치하기
 MySQL 다운로드 받기
 웹 브라우저를 열고 http://dev.mysql.com/downloads/라는 URL을 입력하면 다
음과 같은 웹 페이지가 나타난다.
4/90
2. MySQL 설치하기
 MySQL 다운로드 받기
 가장 최신 버전인 MySQL 5.1을 선택하면 화면이 다음과 같이 바뀐다.
5/90
2. MySQL 설치하기
 MySQL 다운로드 받기
 앞 화면에서 Download 버튼을 누른다.
6/90
2. MySQL 설치하기
 MySQL 다운로드 받기
 앞 화면에서 Windows 플랫폼을 선택하면 Windows 플랫폼에 맞는 MySQL의
여러 에디션이 표시된 화면이 나타난다.
7/90
2. MySQL 설치하기
 MySQL 다운로드 받기
 앞 화면에서 Pick a mirror 링크를 클릭하면 개인 정보를 입력하도록 권장하
는 화면이 나타난다.
8/90
2. MySQL 설치하기
 MySQL 다운로드 받기
 앞 화면 아래쪽의 ‘No Thanks’로 시작하는 링크를 클릭하면 MySQL을 다운로
드 받을 수 있는 다음과 같은 웹 페이지가 나타난다.
9/90
2. MySQL 설치하기
 MySQL 다운로드 받기
 앞 화면에서 HTTP나 FTP 링크 중 하나를 선택하면 다음과 같은 창이 나타나는
데, 여기에서 저장 버튼을 누르면 다운로드가 시작된다.
10/90
2. MySQL 설치하기
 MySQL 설치하기
 다운로드 받은 파일을 더블 클릭하면 왼쪽 창이 나타나며, ‘Next’ 버튼을 누르
면 화면이 오른쪽 그림처럼 바뀐다.
11/90
2. MySQL 설치하기
 MySQL 설치하기
 앞 화면에서 ‘Typical’ 옵션을 선택하고 ‘Next’ 버튼을 누르면 화면이 왼쪽 그림
처럼 바뀌고, ‘Install’ 버튼을 누르면 화면이 오른쪽 그림처럼 바뀌면서 설치가
진행된다.
12/90
2. MySQL 설치하기
 MySQL 설치하기
 설치가 끝나면 왼쪽 화면이 나타나고, ‘Next’ 버튼을 누르면 화면이 오른쪽 그
림처럼 바뀐다. 여기에서 ‘Finish’ 버튼을 누르면 MySQL의 구성 프로그램이
시작된다.
13/90
2. MySQL 설치하기
 MySQL의 구성 정보 입력하기
 MySQL 구성 프로그램이 시작되면 왼쪽 창이 나타나고, ‘Next’ 버튼을 누르면
화면이 오른쪽 그림처럼 바뀐다.
14/90
2. MySQL 설치하기
 MySQL의 구성 정보 입력하기
 앞 화면에서 ‘Next’ 버튼을 누르면 창이 왼쪽 그림처럼 바뀌는데, MySQL가 윈
도우 서비스로서 실행되도록 만들기 위해 아래쪽 체크박스를 선택해서 오른쪽
그림처럼 만든다.
15/90
2. MySQL 설치하기
 MySQL의 구성 정보 입력하기
 앞 화면에서 ‘Next’ 버튼을 누르면 창이 왼쪽 그림처럼 바뀌는데, 여기에서 새
로운 root 사용자 암호를 두 번 입력하고 ‘Next’ 버튼을 누르면 화면이 오른쪽
그림처럼 바뀐다.
• [주의] 암호는 나중에 필요하므로 잘 기억해둔다.
16/90
2. MySQL 설치하기
 MySQL의 구성 정보 입력하기
 앞 화면에서 ‘Execute’ 버튼을 누르면 앞에서 구성 정보의 설정이 시작되고, 설
정이 끝나면 화면이 오른쪽 그림처럼 바뀐다.
 오른쪽 화면에서 ‘Finish’ 버튼을 누르면 MySQL 구성 프로그램이 끝난다.
17/90
2. MySQL 설치하기
 MySQL 시작하기
 시작 메뉴에서 제어판 → 관리 도구 → 서비스를 선택한다.
[그림 12-9] 윈도우즈 운영체제의 서비스로 등록된 MySQL
 상태가 시작됨으로 표시되어 있지 않으면 MySQL이 작동되지 않고 있는 것이
다. 그럴 때는 MySQL 항목을 더블 클릭해서 MySQL 속성 창을 연다.
18/90
2. MySQL 설치하기
 MySQL 시작하기
 MySQL 속성 창의 중간쯤 보면 시작, 중지, 일시 중지, 계속이라는 4개의 버튼
이 있는데 이 중 시작 버튼을 누르면 MySQL이 시작된다.
[그림 12-10] MySQL 서비스를 선택했을 때 나타나는 윈도우
19/90
2. MySQL 설치하기
 데이터베이스 만들기
 MySQL 클라이언트 프로그램 mysqladmin.exe을 이용
• 명령 프롬프트 창에서 실행
 create SQL 명령을 이용하여 데이터베이스 생성
mysqladmin -u root -p create webdb
사용자의 ID
webdb라는 이름의 데이터베이
가
스를
root라는 뜻
만들라는 뜻
패스워드를 입력받겠다
는뜻
①데이터베이스를 생성하라는
명령을 입력합니다
②패스워드를 입력합
니다
[그림 12-11] 데이터베이스를 만드는 방법
20/90
2. MySQL 설치하기
 데이터베이스에 데이터 저장하기
 데이터베이스는 정형화된 구조의 데이터를 저장하기에 적합한 저장 수단이다.
[그림 12-12] 관계형 데이터베이스에 저장하기에 적합한 데이터
 관계형 데이터베이스를 테이블(Table) 형태로 데이터 저장
• 같은 구조를 갖는 데이터(레코드)들끼리 모아 저장
21/90
2. MySQL 설치하기
 데이터베이스에 데이터 저장하기
 테이블을 생성하기 위해서는 먼저 테이블의 구조를 만들어야 하는데, 이 구조
는 데이터 항목의 이름, 타입, 최대 크기에 의해 정해진다.
 테이블을 설계한 다음에 해야 할 일은 데이터베이스 안으로 들어가서 실제로
테이블을 생성하는 것
22/90
2. MySQL 설치하기
 데이터베이스에 데이터 저장하기
 데이터베이스에 로그인하기 위해서는 명령 프롬프트 창에서 다음과 같은 명령
을 입력해야 한다.
mysql -u root -p
사용자의 ID
가
root라는 뜻
패스워드를 입력받겠다
는뜻
• 위 명령을 입력하면 root 사용자의 암호를 묻는 프롬프트가 나타나고, 암호를 입력하
면 mysql> 프롬프트가 나타난다.
 mysql> 프롬프트 다음에 use라는 명령을 다음과 같은 형식으로 입력하면 데이
터베이스에 들어갈 수 있다.
use webdb
데이터베이스의 이
름
• 데이터베이스를 빠져나오려면 mysql> 프롬프트 다음에 quit라고 입력하면 된다.
23/90
2. MySQL 설치하기
 데이터베이스에 데이터 저장하기
1) mysql.exe 프로그램을 실행합니다.
2) 패스워드를 입력합니다.
3) use 명령을 이용해서 특정 데이터베이스로 들어갑니다.
4) quit 명령을 실행하면 mysql.exe 프로그램이 끝납니다.
[그림 12-12] 데이터베이스에 들어가고 나오는 방법
24/90
2. MySQL 설치하기
 데이터베이스에 데이터 저장하기
 테이블을 만들기 위해서는 데이터베이스 안으로 들어가서 다음과 같은 형식의
create 명령을 실행하면 된다.
create table goodsinfo (code char(5), title varchar(50), writer varchar(20), price int(8)) ;
create 문을
시작하는 키
워드
테이블 이
름
데이터 항목의 이름, 타입,
크기
모든 명령문의 끝에
반드시 써야 하는 세미콜
론
 위 명령문의 경우, 필수 입력 데이터가 누락될 가능성이 있다.
 필수 입력 데이터 지정을 위해서는 항목 뒤에 not null이라는 키워드를 사용
create table goodsinfo (
code char(5) not null,
title varchar(50) not null,
writer varchar(20),
price int(8) not null
);
필수 데이터 항목 뒤에는
not null이라고 쓰세요.
25/90
2. MySQL 설치하기
 데이터베이스에 데이터 저장하기
 키로 사용할 데이터 항목을 지정하려면 create 문의 마지막 데이터 항목 뒤에
콤마를 찍고, primary key라는 키워드와 함께 키 항목의 이름을 다음과 같이
쓰면 된다.
create table goodsinfo (
code char(5) not null,
title varchar(50) not null,
writer varchar(20),
price int(8) not null,
primary key(code)
);
code 항목을 키로 지정하는 부분입니
다
 특정 항목을 키를 지정할 때의 이점 :
• 키로 지정된 항목에는 똑같은 데이터 값이 입력될 수 없기 때문에 그 항목을 식별자
로 사용할 수 있다.
• 키로 지정된 항목의 인덱스 정보는 데이터베이스 안에 자동으로 생성되기 때문에 키
를 이용한 검색 속도가 빨라진다.
26/90
2. MySQL 설치하기
 데이터베이스에 데이터 저장하기
 다음 그림은 create 문을 이용해서 실제로 테이블을 만드는 예이다.
[그림 12-13]을 참조
해서
webdb 데이터베이스로
들어가세요
테이블을 생성하는 create 문
을
입력하세요.
정상적으로 테이블이 만들
어지면
이런 메시지가 나옵니다.
[그림 12-14] 테이블을 만드는 방법
27/90
2. MySQL 설치하기
 데이터베이스에 데이터 저장하기
 테이블이 올바르게 만들어졌는지 확인하기 위해서는 desc 명령을 사용
테이블의 구조
[그림 12-15] 테이블의 구조를 확인하는 방법
28/90
2. MySQL 설치하기
 데이터베이스에 데이터 저장하기
 테이블에 데이터를 입력하려면 다음과 같은 형식의 insert 문을 쓰면 된다.
insert into goodsinfo (code, title, writer, price) values ( ‘10001 ’, ‘뇌를 자극하는 Java 프로그래밍 ’, ‘김윤명 ’, 27000);
insert 문을
시작하는 키
워드
테이블 이
름
항목 이
름
키워
드
데이터
• 문자 데이터는 반드시 작은따옴표로 묶어서 써야 한다.
[그림 12-16] 테이블에 데이터를 입력하는 방법
29/90
2. MySQL 설치하기
 데이터베이스에 데이터 저장하기
 테이블에 저장한 데이터를 읽어오려면 select문을 이용
select name, price from goodsinfo;
select 문을
시작하는 키
워드
항목 이름
테이블 이
름
키워
드
 와일드카드 문자(*)를 쓰면 테이블의 모든 항목을 읽어올 수 있다.
select * from goodsinfo;
모든 데이터 항목을
뜻하는
와일드카드 문자
 특정 데이터만 읽어오려면 테이블 이름 뒤에 where 절을 사용
select * from goodsinfo where price > 20000;
키워
드
검색 조
건
30/90
2. MySQL 설치하기
 데이터베이스에 데이터 저장하기
[그림 12-17] 테이블의 데이터를 조회하는 방법
31/90
2. MySQL 설치하기
 데이터베이스에 데이터 저장하기
 테이블에 있는 기존의 데이터를 수정하려면 update 문을 사용
update goodsinfo set writer:= ‘토마스 코멘 외 3명 ’, price:=33600 where code = ‘10005’;
update 문을
시작하는 키
워드
테이블
이름
키워
드
항목 이름:=새로운
값 포맷으로 값을
지정
where 조건
절
[그림 12-18] 테이블의 데이터를 수정하는 방법
32/90
2. MySQL 설치하기
 데이터베이스에 데이터 저장하기
 테이블에 있는 데이터를 삭제하기 위해서는 delete 문을 사용
delete from goodsinfo where code = ‘10005 ’;
delete 문을
시작하는 키워
드
테이블
이름
where 조건
절
[그림 12-19] 테이블의 데이터를 삭제하는 방법
33/90
3. Connector/J 설치하기
 JDBC 드라이버 다운로드 받기
 웹 사이트 : http://dev.mysql.com/downloads/
34/90
3. Connector/J 설치하기
 JDBC 드라이버 다운로드 받기
 스크롤 바를 내리면 Connector/J를 다운로드 받을 수 있는 링크들이 나타난다.
35/90
3. Connector/J 설치하기
 JDBC 드라이버 다운로드 받기
 최신 버전의 Connector/J에 대한 링크를 클릭해서 다운로드 받는다.
36/90
3. Connector/J 설치하기
 JDBC 드라이버 설치하기
37/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 JDBC 개념과 역할
 JDBC(Java Database Connectivity) - 자바에서 데이터베이스를 표준화 된
방법으로 접속할 수 있도록 만든 API 규격
 데이터베이스 벤더와 상관없이 동일한 개발이 가능하게 함
애
플
리
케
이
션
사용
JDBC
드라이버
관리자
구현
오라클 JDBC
드라이버
오라클 DBMS
MySql JDBC 드라이버
MySql DBMS
인포믹스 JDBC
드라이버
인포믹스
DBMS
38/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 JDBC 드라이버 유형
자바 애플리케이션
JDBC API
JDBC 드라이버 관리자
JDBC 드라이버 API
JDBC-ODBC
드라이버
Native-API
드라이버
Net-Protocol
드라이버
Native-Protocol
드라이버
ODBC 드라이버
JDBC 미들웨어
DBMS
DBMS
DBMS
DBMS
DBMS
39/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 JDBC 드라이버 설치 – 오라클 JDBC 드라이버
 JDBC 드라이버 선택
• JDBC 드라이버는 사용하고자 하는 데이터베이스 벤더 별로 제공 됨
 오라클 JDBC드라이버
• c:\dev\oraclexe\app\oracle\product\10.2.0\server\jdbc\lib\ojdbc1
4.jar
 설치 디렉터리(다음 중 한 가지를 이용함)
• JDK설치디렉터리\jre\lib\ext\ 에 복사하는 방법.
• 톰캣설치디렉터리\common\lib 폴더에 복사하는 방법
• 이클립스 프로젝트의 WebContent\WEB-INF\lib 폴더에 복사하는 방법
WebContent\WEB-INF\lib 폴더에 설치
40/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 JDBC 프로그래밍 단계 (1)
41/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 JDBC 프로그래밍 단계 (2)
42/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 JDBC 드라이버 로드& 데이터베이스 연결
43/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 JDBC 드라이버 로드& 데이터베이스 연결
 자바 프로그램에서 관계형 데이터베이스로 연결을 하기 위해서는 먼저 다음과
같은 방법으로 JDBC 드라이버를 로드해야 한다.
Class.forName(“com.mysql.jdbc.Driver”);
JDBC 드라이버의 클래스
이름
 데이터베이스로 연결을 하기 위해서는 먼저 프로토콜, 서브프로토콜, 서브네
임으로 이루어진 데이터베이스 URL을 알아두어야 한다.
jdbc:mysql://219.153.12.14:3306/webdb
프로토콜
(protocol)
서브프로토콜
(subprotocol)
서브네임(subname)
IP주소:포트번호/DB이름
• 서브네임의 작성 방법은 DBMS의 종류마다 다르므로 MySQL이 아닌 다른 DBMS를
사용할 때는 관련 매뉴얼을 찾아보아야 한다.
44/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 JDBC 드라이버 로드& 데이터베이스 연결
 데이터베이스로 연결을 맺기 위해서는 java.sql.DriverManager 클래스의
getConnection 메서드를 호출해야 한다.
Connection conn = DriverManager.getConnection(“jdbc:mysql://219.153.12.14:3306/webdb ”, “root ”, “1234 ”);
데이터베이스
URL
사용자
ID
패스워드
• 이 메서드는 데이터베이스로의 연결에 성공하면 java.sql.Connection 인터페이스 타입
의 객체를 만들어서 리턴한다.
 데이터베이스로의 연결을 끊기 위해서는 Connection 객체에 대해 close 메서드
를 호출하면 된다.
conn.close()
데이터베이스로
의
연결을 끊는 메
서드
45/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 JDBC 드라이버 로드& 데이터베이스 연결
[예제 12-1] JDBC 드라이버의 로드, 데이터베이스로 연결하고 연결 끊기
<%@page contentType= “text/html; charset=euc-kr ”%>
<%@page import= “java.sql.* ”%>
<HTML>
<HEAD><TITLE>데이터베이스로 연결하기</TITLE></HEAD>
<BODY>
<H3>데이터베이스 연결 테스트</H3>
<%
Class.forName( “com.mysql.jdbc.Driver ”);
Connection conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/webdb ”, “root ”, “1234 ”);
if (conn != null) {
out.println( “webdb 데이터베이스로 연결했습니다.<BR> ”);
conn.close();
out.println( “webdb 데이터베이스로의 연결을 끊었습니다.<BR> ”);
}
else {
out.println( “webdb 데이터베이스로 연결할 수 없습니다.<BR> ”);
}
%>
</BODY>
</HTML>
[그림 12-26] 예제 12-1의 실행 결과
46/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 데이터베이스의 데이터를 읽어오는 방법
 데이터베이스에 있는 데이터를 읽어오려면 우선 Connection 객체에 대해
createStatement 메서드를 호출해서 java.sql.Statement 타입 객체를 구한다.
Statement stmt = conn.createStatement();
getConnection 메서드가
리턴한 Connection 객체
Statement 객체를
만들어서 리턴하는 메서
드
 Statement 객체에 대해 executeQuery 메서드를 호출하면 데이터베이스에 있는
데이터를 읽어올 수 있다.
ResultSet rs = stmt.executeQuery( “select * from goodsinfo where code=‘10002’; ”);
select 문을 실행하는 메서
드
47/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 데이터베이스의 데이터를 읽어오는 방법
 executeQuery 메서드가 리턴한 ResultSet 객체에 대해 next 메서드를 호출하면
데이터베이스로부터 읽은 데이터를 순서대로 가져올 수 있다.
boolean exists = rs.next();
데이터베이스로부터 읽은 데이터의
첫 번째/다음 행 위치로 이동하는 메
서드
• 다음 위치에 데이터가 있을 때는 true, 없을 때는 false를 리턴한다.
 next 메서드를 호출한 다음에 ResultSet 객체에 대해 getInt, getString, getFloat
등의 메서드를 호출하면 특정 데이터 항목 값을 가져올 수 있다.
String code = rs.getString( “code ”);
문자 데이터를 가져오는
메서드
int price = rs.getInt( “price ”);
정수 데이터를 가져오는
메서드
48/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 데이터베이스의 데이터를 읽어오는 방법
 필요한 데이터를 모두 가져온 다음에는 ResultSet 객체가 더 이상 필요치 않기
때문에 close 메서드를 호출해야 한다.
rs.close();
ResultSet을 닫는 메서
드
 Statement 객체도 모두 사용하고 난 다음에는 close 메서드를 호출해서 닫아야
한다.
stmt.close();
Statement를 닫는 메
서드
49/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 데이터베이스의 데이터를 읽어오는 방법
[예제 12-2] 상품 정보 테이블을 읽는 JSP 페이지
<%@page contentType= “text/html; charset=euc-kr ” errorPage= “DBError.jsp ” %>
<%@page import= “java.sql.* ”%>
<%
String code = request.getParameter( “code ”);
Connection conn = null;
Statement stmt = null;
try {
Class.forName( “com.mysql.jdbc.Driver ”);
conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/webdb”, “root ”, “1234”);
if (conn == null)
throw new Exception( “데이터베이스에 연결할 수 없습니다.<BR> ”);
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery( “select * from goodsinfo where code = ‘” + code + “’; ”);
if (rs.next()) {
String title = rs.getString( “title ”);
String writer = rs.getString( “writer ”);
int price = rs.getInt( “price ”);
request.setAttribute( “CODE ”, code);
<%!
request.setAttribute( “TITLE ”, toUnicode(title));
// ISO-8859-1 문자열을 Unicode 문자열로 바꾸는 메서드
request.setAttribute( “WRITER ”, toUnicode(writer));
private String toUnicode(String str) {
request.setAttribute( “PRICE ”, new Integer(price));
}
try {
}
byte[] b = str.getBytes( “ISO-8859-1 ”);
finally {
return new String(b);
try {
}
stmt.close();
catch (java.io.UnsupportedEncodingException uee) {
}
System.out.println(uee.getMessage());
catch (Exception ignored) {
}
return null;
try {
}
conn.close();
}
}
%>
catch (Exception ignored) {
}
}
RequestDispatcher dispatcher = request.getRequestDispatcher(“GoodsInfoViewer.jsp”);
dispatcher.forward(request, response);
%>
50/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 데이터베이스의 데이터를 읽어오는 방법
[예제 12-3] 상품 정보를 보여주는 JSP 페이지
<%@page contentType= “text/html; charset=euc-kr ”%>
<HTML>
<HEAD><TITLE>상품 정보</TITLE></HEAD>
<BODY>
<H3>상품 정보</H3>
코드: ${CODE} <BR>
제목: ${TITLE} <BR>
저자: ${WRITER} <BR>
가격: ${PRICE}원 <BR>
</BODY>
</HTML>
[예제 12-4] 데이터베이스 에러를 출력하는 JSP 페이지
<%@page contentType=“text/html; charset=euc-kr” isErrorPage=“true” %>
<% response.setStatus(200); %>
<HTML>
<HEAD><TITLE>데이터베이스 에러</TITLE></HEAD>
<BODY>
<H3>데이터베이스 에러</H3>
에러 메시지: <%= exception.getMessage() %>
</BODY>
</HTML>
[그림 12-27] 예제 12-2 ~ 예제 12-4의 실행 결과
51/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 데이터베이스에 데이터를 입력하는 방법
 데이터베이스에 데이터를 입력하려면 데이터를 읽어올 때와 마찬가지로 우선
Statement 객체를 구해야 한다.
Statement stmt = conn.createStatement();
Statement 객체를 만드는 메
서드
 Statement 객체에 대해 executeUpdate라는 메서드를 호출하면 데이터베이스에
새로운 데이터를 추가할 수 있다.
insert 문을 실행하는 메서드
int rowNum = stmt.executeUpdate(
“insert goodsinfo (code, title, writer, price) values(‘10001’, ‘뇌를 자극하는 Java 프로그래밍’, ‘김윤명’, 27000);”);
 executeUpdate 메서드를 이용해서 데이터를 입력한 다음에는 Statement 객체
에 대해 close 메서드를 호출해야 한다.
52/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 데이터베이스에 데이터를 입력하는 방법
[그림 12-13]을
참조해서 webdb
데이터베이스로
들어가세요
테이블을 생성하는
create
문을 입력하세요
정상적으로 테이블이 만들어
지면
이런 메시지가 나옵니다
mysql.exe를 끝내세요
[그림 12-28] 회원 정보 테이블을 만드는 방법
53/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 데이터베이스에 데이터를 입력하는 방법
 다음과 같이 작동하는 회원 가입 애플리케이션을 만들어보자.
① 회원 정보를 입력
하고
‘확인’ 버튼을 누르면
② 해당 정보가 DB에 입력
된후
결과 화면이 나타납니다.
[그림 12-29] 회원 가입 애플리케이션의 화면 설계
54/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 데이터베이스에 데이터를 입력하는 방법
 이 애플리케이션은 다음과 같은 세 개의 모듈로 구현한다.
 HTML 문서와 JSP 페이지의 URL은 다음과 같이 정하기로 한다.
http://localhost:8080/brain12/SubscriptionForm.html
http://localhost:8080/brain12/Subscription.jsp
http://localhost:8080/brain12/SubscriptionResult.jsp
회원 정보 입력 화
면
HTML 문서의
URL
회원 정보 DB 입
력
JSP 페이지의
URL
회원 가입 결과 출
력
JSP 페이지의
URL
55/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 데이터베이스에 데이터를 입력하는 방법
[예제 12-5] 회원 정보를 입력받는 HTML 문서
<HTML>
<HEAD>
<META http-equiv= “Content-Type ” content= “text/html;charset=euc-kr ”>
<TITLE>회원 가입</TITLE>
</HEAD>
<BODY>
<H4>회원 정보를 입력하세요.</H4>
<FORM ACTION=Subscription.jsp METHOD=POST>
이름: <INPUT TYPE=TEXT NAME=name SIZE=10> <BR>
아이디: <INPUT TYPE=TEXT NAME=id SIZE=8> <BR>
패스워드: <INPUT TYPE=PASSWORD NAME=password SIZE=8> <BR>
<INPUT TYPE=SUBMIT VALUE= ‘확인 ’>
<INPUT TYPE=RESET VALUE= ‘취소 ’>
</FORM>
</BODY>
</HTML>
56/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 데이터베이스에 데이터를 입력하는 방법
[예제 12-6] 회원 정보를 데이터베이스에 입력하는 JSP 페이지
<%@page contentType= “text/html; charset=euc-kr” errorPage= “DBError.jsp” %>
<%@page import= “java.sql.* ”%>
<%
String name = request.getParameter( “name” );
String id = request.getParameter( “id ”);
String password = request.getParameter( “password ”);
if (name == null || id == null || password == null)
throw new Exception( “데이터를 입력하세요. ”);
Connection conn = null;
Statement stmt = null;
try {
Class.forName( “com.mysql.jdbc.Driver ”);
conn = DriverManager.getConnection( “jdbc:mysql://localhost:3306/webdb ”, “root ”, “1234 ”);
if (conn == null)
throw new Exception( “데이터베이스에 연결할 수 없습니다. ”);
stmt = conn.createStatement();
String command = String.format( “insert into userinfo (name, id, password) values ( ‘%s ’, ‘%s ’, ‘%s ’); ”, name, id, password);
int rowNum = stmt.executeUpdate(command);
if (rowNum < 1)
throw new Exception( “데이터를 DB에 입력할 수 없습니다. ”);
}
finally {
try {
stmt.close();
}
catch (Exception ignored) {
}
try {
conn.close();
}
catch (Exception ignored) {
}
}
response.sendRedirect( “SubscriptionResult.jsp ”);
%>
57/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 데이터베이스에 데이터를 입력하는 방법
[예제 12-7] 회원 가입 결과를 출력하는 JSP 페이지
<%@page contentType= “text/html; charset=euc-kr ”%>
<HTML>
<HEAD><TITLE>회원 가입 결과</TITLE></HEAD>
<BODY>
<H3>회원 가입 결과</H3>
가입되었습니다.
</BODY>
</HTML>
[그림 12-31] 예제 12-5 ~ 예제 12-7의 실행 결과
58/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 데이터베이스에 데이터를 입력하는 방법
1) webdb 데이터베이스로 들어가십시
오.
2) 회원 정보 테이블을 조회하는 select 문을 입
력하십시오.
3) 입력된 데이터를 확인할 수 있
습니다.
[그림 12-32] 예제 12-5 ~ 예제 12-7의 결과를 확인하는 방법
59/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 데이터베이스의 데이터를 수정하고 삭제하는 방법
 데이터베이스에 있는 데이터를 수정할 때는 executeUpdate 메서드에 update 문
을 파라미터로 넘겨줘야 한다.
int rowNum = stmt.executeUpdate( “update userinfo set password :=‘dalek’ where id = ‘rose ’; ”);
이 메서드를 이용해서 update 문을 실행할 수
있습니다
 데이터베이스에 있는 데이터 삭제할 때는 executeUpdate 메서드에 delete 문을
파라미터로 넘겨줘야 한다.
int rowNum = stmt.executeUpdate( “delete from userinfo where id = ‘rose ’; ”);
이 메서드를 이용해서 delete 문을 실행할 수도
있습니다.
60/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 데이터베이스의 데이터를 수정하고 삭제하는 방법
 데이터베이스에 저장되어 있는 상품 정보를 수정하는 애플리케이션을 작성
상품 정보 편집 화
면
초기 화
면
상품 정보 수정 결과
화면
[그림 12-33] 상품 정보 수정 애플리케이션의 화면 설계
61/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 데이터베이스의 데이터를 수정하고 삭제하는 방법
 앞 애플리케이션을 다음과 같은 5개의 모듈로 구성하기로 하자.
http://localhost:8080/brain12/GIM/InitForm.html
http://localhost:8080/brain12/GIM/Reader.jsp
http://localhost:8080/brain12/GIM/EditForm.jsp
http://localhost:8080/brain12/GIM/Updater.jsp
http://localhost:8080/brain12/GIM/UpdateResult.jsp
상품코드 입력 화
면
HTML 문서의
상품
URL 정보 DB 읽
기
JSP 페이지의
상품
URL 정보 편집 화
면
JSP 페이지의
상품
URL 정보 DB 수
정
JSP 페이지의
상품
URL 정보 수정 결
과
JSP 페이지의
URL
62/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 데이터베이스의 데이터를 수정하고 삭제하는 방법
[예제 12-8] 상품코드를 입력받는 HTML 문서
<HTML>
<HEAD>
<META http-equiv= “Content-Type ” content= “text/html;charset=euc-kr ”>
<TITLE>상품 정보 관리</TITLE>
</HEAD>
<BODY>
<H4>상품코드를 입력하세요.</H4>
<FORM ACTION=Reader.jsp METHOD=GET>
상품코드: <INPUT TYPE=TEXT NAME=code SIZE=5>
<INPUT TYPE=SUBMIT VALUE= ‘확인 ’>
</FORM>
</BODY>
</HTML>
63/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 데이터베이스의 데이터를 수정하고 삭제하는 방법
[예제 12-9] 상품 정보 테이블을 읽는 JSP 페이지
<%@page contentType= “text/html; charset=euc-kr ” errorPage= “../DBError.jsp ” %>
<%@page import= “java.sql.* ”%>
<%
String code = request.getParameter( “code ”);
if (code == null)
throw new Exception( “상품코드를 입력하세요. ”);
Connection conn = null;
Statement stmt = null;
try {
Class.forName( “com.mysql.jdbc.Driver ”);
conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/webdb ”, “root ”, “1234 ”);
if (conn == null)
throw new Exception( “데이터베이스에 연결할 수 없습니다. ”);
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery( “select * from goodsinfo where code = ‘” + code + “’; ”);
if (!rs.next())
throw new Exception(“상품코드( ” + code + “)에 해당하는 데이터가 없습니다. ”);
String title = rs.getString( “title ”);
String writer = rs.getString( “writer ”);
int price = rs.getInt( “price ”);
request.setAttribute( “CODE ”, code);
request.setAttribute( “TITLE ”, toUnicode(title));
request.setAttribute( “WRITER ”, toUnicode(writer));
request.setAttribute( “PRICE ”, new Integer(price));
<%!
}
// ISO-8859-1 문자열을 Unicode 문자열로 바꾸는 메서드
finally {
private String toUnicode(String str) {
try {
try {
stmt.close();
byte[] b = str.getBytes( “ISO-8859-1 ”);
}
return new String(b);
catch (Exception ignored) {
}
}
catch (java.io.UnsupportedEncodingException uee) {
try {
System.out.println(uee.getMessage());
conn.close();
return null;
}
}
catch (Exception ignored) {
}
}
%>
}
RequestDispatcher dispatcher =
request.getRequestDispatcher( “EditForm.jsp ”);
dispatcher.forward(request, response);
%>
64/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 데이터베이스의 데이터를 수정하고 삭제하는 방법
[예제 12-10] 상품 정보 관리 화면을 제공하는 JSP 페이지
<%@page contentType= “text/html; charset=euc-kr ” %>
<HTML>
<HEAD>
<TITLE>상품 정보 관리</TITLE>
</HEAD>
<BODY>
<H4>상품 정보를 수정한 후 수정 버튼을 누르세요.</H4>
<FORM ACTION=Updater.jsp METHOD=POST>
코드: <INPUT TYPE=TEXT NAME=code SIZE=5 VALUE= ‘${CODE} ’ READONLY=TRUE> <BR>
제목: <INPUT TYPE=TEXT NAME=title SIZE=50 VALUE= ‘${TITLE} ’> <BR>
저자: <INPUT TYPE=TEXT NAME=writer SIZE=20 VALUE= ‘${WRITER} ’> <BR>
가격: <INPUT TYPE=TEXT NAME=price SIZE=8 VALUE= ‘${PRICE} ’>원 <BR>
<INPUT TYPE=SUBMIT VALUE= ‘수정 ’>
</FORM>
</BODY>
</HTML>
65/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 데이터베이스의 데이터를 수정하고 삭제하는 방법
[예제 12-11] 상품 정보를 수정하는 JSP 페이지
<%@page contentType= “text/html; charset=euc-kr ” errorPage= “../DBError.jsp ” %>
<%@page import= “java.sql.* ”%>
<%
reqeuest.setCharacterEncoding(“euc-kr”);
String code = request.getParameter( “code ”);
String title = request.getParameter( “title ”);
String writer = request.getParameter( “writer ”);
String price = request.getParameter( “price ”);
if (code == null || title == null || writer == null || price == null)
throw new Exception( “누락된 데이터가 있습니다. ”);
Connection conn = null;
Statement stmt = null;
try {
Class.forName( “com.mysql.jdbc.Driver ”);
conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/webdb ”, “root ”, “1234 ”);
if (conn == null)
throw new Exception( “데이터베이스에 연결할 수 없습니다. ”);
stmt = conn.createStatement();
String command = String.format( “update goodsinfo set title := ‘%s ’, writer := ‘%s ’, price := %s where code = ‘%s ’; ”,
title, writer, price, code);
int rowNum = stmt.executeUpdate(command);
if (rowNum < 1)
throw new Exception( “데이터를 DB에 입력할 수 없습니다.” );
}
finally {
try {
stmt.close();
}
catch (Exception ignored) {
}
try {
conn.close();
}
catch (Exception ignored) {
}
}
response.sendRedirect( “UpdateResult.jsp?code= ” + code);
%>
66/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 데이터베이스의 데이터를 수정하고 삭제하는 방법
[예제 12-12] 상품 정보의 수정 결과를 보여주는 JSP 페이지
<%@page contentType= “text/html; charset=euc-kr ”%>
<HTML>
<HEAD><TITLE>상품 정보 관리</TITLE></HEAD>
<BODY>
<H4>상품 정보가 수정되었습니다.</H4>
수정된 정보를 조회하려면 아래의 링크를 클릭하세요. <BR><BR>
<A HREF=Reader.jsp?code=${param.code}>상품 정보 조회</A>
</BODY>
</HTML>
67/90
4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법
 데이터베이스의 데이터를 수정하고 삭제하는 방법
68/90
5. 데이터베이스 커넥션 풀의 설치와 사용
 데이터베이스에 동시에 접속할 수 있는 사용자 수는 한정되어 있는데, 웹 서버
에는 동시에 수백, 수천의 사용자들이 접속할 수 있다.
 웹 애플리케이션이 실행될 때마다 데이터베이스로 새로운 접속을 맺는 것은
부하가 큰 작업  데이터베이스 몇 개의 접속을 맺어서 데이터베이스 커넥션
풀(Database Connection Pool)에 저장해놓고, 필요한 웹 애플리케이션이 빌려
쓰고 반환하는 방식을 사용.
69/90
5. 데이터베이스 커넥션 풀의 설치와 사용
 DBCP, Pool, Collections 모듈 다운로드 받기
 웹 사이트 : http://www.apache.org/.
70/90
5. 데이터베이스 커넥션 풀의 설치와 사용
 DBCP, Pool, Collections 모듈 다운로드 받기
 앞 화면에서 Commons 프로젝트를 선택한다..
71/90
5. 데이터베이스 커넥션 풀의 설치와 사용
 DBCP, Pool, Collections 모듈 다운로드 받기
 DBCP 링크를 클릭하여 모듈을 찾아서 다운로드 한다..
72/90
5. 데이터베이스 커넥션 풀의 설치와 사용
 DBCP, Pool, Collections 모듈 다운로드 받기
 Pool 링크를 클릭하여 모듈을 찾아서 다운로드 한다..
73/90
5. 데이터베이스 커넥션 풀의 설치와 사용
 DBCP, Pool, Collections 모듈 다운로드 받기
 Collections 링크를 클릭하여 모듈을 찾아서 다운로드 한다..
74/90
5. 데이터베이스 커넥션 풀의 설치와 사용
 DBCP, Pool, Collections 모듈 설치하기.
75/90
5. 데이터베이스 커넥션 풀의 설치와 사용
 데이터베이스 커넥션 풀을 사용하는 방법
 데이터베이스 커넥션 풀을 이용한 데이터베이스 사용법은 데이터베이스 커넥
션 풀을 사용하지 않을 때와 비슷하다.
• 차이점이라면 Class.forName과 DriverManager, getConnection 메서드에 넘겨주는 파
라미터 값이 다르다는 정도이다.
[그림 12-44] 데이터베이스 커넥션 풀을 통해 데이터베이스를 사용하는 방법
76/90
5. 데이터베이스 커넥션 풀의 설치와 사용
 데이터베이스 커넥션 풀을 생성하고 등록하는 프로그램의 작성 방법
 데이터베이스 커넥션 풀 생성은 우선 org.apache.commons.pool.impl 패키지에
속하는 GenericObjectPool 클래스나 StackObjectPool 클래스의 객체를 생성
GenericObjectPool objectPool = new GenericObjectPool();
GenericObjectPool 객체를 생성합니다.
• GenericObjectPool 클래스는 데이터베이스 커넥션 풀을 표현하는 것이 아니라 일반
자바 객체를 담는 풀을 표현한다.
 데이터베이스 커넥션을 생성하는 객체는 DBCP 모듈에 속하는
org.apache.commons.dbcp 패키지의 DriverManagerConnectionFactory 클래스
를 이용해서 만들 수 있다.
DriverManagerConnectionFactory connectionFactory = new DriverManagerConnectionFactory(
“jdbc:mysql://localhost:3306/webdb ”, “root ”, “1234 ”);
데이터베이스
URL
아이디
패스워
드
77/90
5. 데이터베이스 커넥션 풀의 설치와 사용
 데이터베이스 커넥션 풀을 생성하고 등록하는 프로그램의 작성 방법
 앞에서 만든 두 객체가 함께 작동시키려면 org.apache.commons.dbcp 패키지에
속하는 PoolableConnectionFactory 클래스의 객체를 만들어야 한다.
new PoolableConnectionFactory(connectionFactory, objectPool, null, null, false, true);
DriverManagerConnectionFactory 객체
GenericObjectPool 객체
 다음은 PoolingDriver 객체를 생성해서 GenericObjectPool 객체를 웹 컨테이너
에 등록하는 것이다.
PoolingDriver driver = new PoolingDriver();
PoolingDriver 객체를 생성한다
driver.registerPool( “/webdb_pool ”, objectPool);
데이터베이스 커넥션 풀의
이름
GenericObjectPool 객체
78/90
5. 데이터베이스 커넥션 풀의 설치와 사용
 데이터베이스 커넥션 풀을 생성하고 등록하는 프로그램의 작성 방법
[예제 12-13] 데이터베이스 커넥션 풀을 생성하고 등록하는 JSP 페이지
<%@page contentType= “text/html; charset=euc-kr ”%>
<%@page import= “org.apache.commons.dbcp.* ”%>
<%@page import= “org.apache.commons.pool.impl.* ”%>
<%
GenericObjectPool objectPool = new GenericObjectPool();
DriverManagerConnectionFactory connectionFactory = new DriverManagerConnectionFactory(
“jdbc:mysql://localhost:3306/webdb ”, “root ”, “1234 ”);
new PoolableConnectionFactory(connectionFactory, objectPool, null, null, false, true);
PoolingDriver driver = new PoolingDriver();
driver.registerPool( “/webdb_pool ”, objectPool);
%>
<HTML>
<HEAD><TITLE>데이터베이스 커넥션 풀 생성하기</TITLE></HEAD>
<BODY>
<H3>데이터베이스 커넥션 풀 생성하기</H3>
데이터베이스 커넥션 풀을 생성하고 등록했습니다. <BR><BR>
풀 이름: /webdb_pool
</BODY>
</HTML>
[그림 12-45] 예제 12-13의 실행 결과
79/90
5. 데이터베이스 커넥션 풀의 설치와 사용
 데이터베이스 커넥션 풀을 생성하고 등록하는 프로그램의 작성 방법
[예제 12-14] 데이터베이스 커넥션 풀 테스트하기 ( 1 )
<%@page contentType= “text/html; charset=euc-kr ” errorPage= “DBError.jsp ” %>
<%@page import= “java.sql.* ”%>
<HTML>
<HEAD><TITLE>데이터베이스 커넥션 풀 테스트</TITLE></HEAD>
<BODY>
<H3>데이터베이스 커넥션 풀 테스트</H3>
<%
Class.forName( “org.apache.commons.dbcp.PoolingDriver ”);
Connection conn = DriverManager.getConnection( “jdbc:apache:commons:dbcp:/webdb_pool ”);
if (conn != null) {
out.println( “연결 취득 완료<BR> ”);
conn.close();
out.println( “연결 반환 완료<BR> ”);
}
else {
out.println( “연결 취득 실패<BR> ”);
}
%>
</BODY>
</HTML>
[그림 12-46] 예제 12-14의 실행 결과 - 올바른 결과
[그림 12-47] 예제 12-14의 실행 결과 - 에러가 발생했을 때
80/90
5. 데이터베이스 커넥션 풀의 설치와 사용
 데이터베이스 커넥션 풀을 생성하고 등록하는 프로그램의 작성 방법
[예제 12-15] 상품 정보 테이블을 읽는 JSP 페이지 - 데이터베이스 커넥션 풀 사용
<%@page contentType= “text/html; charset=euc-kr ” errorPage= “DBError.jsp ” %>
<%@page import= “java.sql.* ”%>
<%
String code = request.getParameter( “code ”);
Connection conn = null;
Statement stmt = null;
try {
Class.forName( “org.apache.commons.dbcp.PoolingDriver ”);
conn = DriverManager.getConnection(“jdbc:apache:commons:dbcp:/webdb_pool ”);
if (conn == null)
throw new Exception( “데이터베이스에 연결할 수 없습니다.<BR> ”);
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery( “select * from goodsinfo where code = ‘” + code + “’; ”);
if (rs.next()) {
String title = rs.getString( “title ”);
String writer = rs.getString( “writer ”);
int price = rs.getInt( “price ”);
request.setAttribute( “CODE ”, code);
<%!
request.setAttribute( “TITLE ”, toUnicode(title));
request.setAttribute( “WRITER ”, toUnicode(writer));
// ISO-8859-1 문자열을 Unicode 문자열로 바꾸는 메서드
request.setAttribute( “PRICE ”, new Integer(price));
private String toUnicode(String str) {
}
try {
}
byte[] b = str.getBytes( “ISO-8859-1 ”);
finally {
return new String(b);
try {
}
stmt.close();
catch (java.io.UnsupportedEncodingException uee) {
}
System.out.println(uee.getMessage());
catch (Exception ignored) {
return null;
}
try {
}
conn.close();
}
}
%>
catch (Exception ignored) {
}
}
RequestDispatcher dispatcher = request.getRequestDispatcher( “GoodsInfoViewer.jsp ”);
dispatcher.forward(request, response);
%>
81/90
5. 데이터베이스 커넥션 풀의 설치와 사용
 데이터베이스 커넥션 풀을 생성하고 등록하는 프로그램의 작성 방법
[그림 12-48] 예제 12-15의 실행 결과 - 올바른 결과
[그림 12-49] 예제 12-15의 실행 결과 - 에러가 발생했을 때
82/90
5. 데이터베이스 커넥션 풀의 설치와 사용
 데이터베이스 커넥션 풀을 생성하고 등록하는 프로그램의 작성 방법
[예제 12-16] jspInit 메서드 안에서 데이터베이스 커넥션 풀을 생성하고 등록하는 JSP 페이지
<%@page contentType= “text/html; charset=euc-kr ”%>
<%@page import= “org.apache.commons.dbcp.* ”%>
<%@page import= “org.apache.commons.pool.impl.* ”%>
<%!
public void jspInit() {
GenericObjectPool objectPool = new GenericObjectPool();
DriverManagerConnectionFactory connectionFactory = new DriverManagerConnectionFactory(
“jdbc:mysql://localhost:3306/webdb ”, “root ”, “1234 ”);
new PoolableConnectionFactory(connectionFactory, objectPool, null, null, false, true);
PoolingDriver driver = new PoolingDriver();
driver.registerPool( “/webdb_pool ”, objectPool);
}
%>
웹 컨테이너가 시작될 때
서블릿이 초기화되도록 만드
는값
[그림 12-50] 웹 컨테이너가 시작될 때 JSP 페이지가 초기화되도록 만드는 방법
83/90
5. 데이터베이스 커넥션 풀의 설치와 사용
 JOCL 파일을 이용한 데이터베이스 커넥션 풀 생성 방법
 JOCL 파일을 이용하면 프로그램을 작성하지 않고 DBCP 데이터베이스 커넥션
풀을 생성하고 등록할 수 있다.
[그림 12-51] JOCL 파일의 예
 위 코드를 자세히 살펴보면 DBCP 데이터베이스 커넥션 풀을 생성하고 등록하
는 프로그램과 동일한 부분이 많이 있음을 알 수 있다.
 JOCL 파일은 WEB-INF/classes 서브디렉터리 안에 저장해야 한다.
84/90
5. 데이터베이스 커넥션 풀의 설치와 사용
 JOCL 파일을 이용한 데이터베이스 커넥션 풀 생성 방법
85/90
5. 데이터베이스 커넥션 풀의 설치와 사용
 JOCL 파일을 이용한 데이터베이스 커넥션 풀 생성 방법
 JOCL 파일을 사용할 때는 JDBC 드라이버, DBCP, Pool, Collections 모듈을
JOCL 파일이 속하는 웹 애플리케이션 디렉터리의 WEB-INF/lib 디렉터리로
옮겨와야 한다..
86/90
5. 데이터베이스 커넥션 풀의 설치와 사용
 JOCL 파일을 이용한 데이터베이스 커넥션 풀 생성 방법
[예제 12-17] 데이터베이스 커넥션 풀 테스트하기 (2)
<%@page contentType= “text/html; charset=euc-kr ” errorPage= “DBError.jsp ” %>
<%@page import= “java.sql.* ”%>
<HTML>
<HEAD><TITLE>데이터베이스 커넥션 풀 테스트</TITLE></HEAD>
<BODY>
<H3>데이터베이스 커넥션 풀 테스트</H3>
<%
Class.forName( “org.apache.commons.dbcp.PoolingDriver ”);
Connection conn = DriverManager.getConnection(“jdbc:apache:commons:dbcp:/wdbpool ”);
if (conn != null) {
out.println( “연결 취득 완료<BR> ”);
conn.close();
out.println( “연결 반환 완료<BR> ”);
}
else {
out.println( “연결 취득 실패<BR> ”);
}
%>
</BODY>
</HTML>
[그림 12-54] 예제 12-17의 실행 결과
87/90
5. 데이터베이스 커넥션 풀의 설치와 사용
 JOCL 파일을 이용한 데이터베이스 커넥션 풀 생성 방법
[예제 12-18] 회원 정보를 입력하는 JSP 페이지
<%@page contentType= “text/html; charset=euc-kr ” errorPage= “DBError.jsp ” %>
<%@page import= “java.sql.* ”%>
<%
String name = request.getParameter( “name ”);
String id = request.getParameter( “id ”);
String password = request.getParameter( “password ”);
if (name == null || id == null || password == null)
throw new Exception( “데이터를 입력하세요. ”);
Connection conn = null;
Statement stmt = null;
try {
Class.forName( “org.apache.commons.dbcp.PoolingDriver ”);
conn = DriverManager.getConnection(“jdbc:apache:commons:dbcp:/wdbpool ”);
if (conn == null)
throw new Exception( “데이터베이스에 연결할 수 없습니다. ”);
stmt = conn.createStatement();
String command = String.format( “insert into userinfo ” + “(name, id, password) values ( ‘%s ’, ‘%s ’, ‘%s ’); ”, name, id, password);
int rowNum = stmt.executeUpdate(command);
if (rowNum < 1)
throw new Exception( “데이터를 DB에 입력할 수 없습니다. ”);
}
finally {
try {
stmt.close();
}
catch (Exception ignored) {
}
try {
conn.close();
}
catch (Exception ignored) {
}
}
response.sendRedirect( “SubscriptionResult.jsp ”);
%>
88/90
5. 데이터베이스 커넥션 풀의 설치와 사용
 JOCL 파일을 이용한 데이터베이스 커넥션 풀 생성 방법
[그림 12-55] 예제 12-15, 예제 12-18, 예제 12-7의 실행 결과
89/90
JSP & Servlet