86
뇌뇌 뇌뇌뇌뇌 JSP & Servlet 뇌뇌뇌뇌뇌뇌 뇌뇌뇌뇌

데이터베이스 사용하기

  • Upload
    rehan

  • View
    55

  • Download
    1

Embed Size (px)

DESCRIPTION

12. 데이터베이스 사용하기 . 학습목표 데이터베이스를 이용하면 파일보다 훨씬 더 체계적이고 구조적인 방법으로 데이터를 저장하고 관리할 수 있다 . 그래서 웹 프로그래밍에서도 데이터베이스를 사용해야 할 경우가 많이 있는데 이번 장에서는 그 방법을 배워보자 . 내용 데이터베이스에 대하여 MySQL 설치하기 Connector/J 설치하기 웹 컴포넌트에서 데이터베이스를 사용하는 방법 데이터베이스 커넥션 풀의 설치와 사용. 1. 데이터베이스에 대하여. - PowerPoint PPT Presentation

Citation preview

뇌를 자극하는 JSP & Servlet

데이터베이스 사용하기

2/80

Contents

학습목표

데이터베이스를 이용하면 파일보다 훨씬 더 체계적이고 구조적인 방법으로

데이터를 저장하고 관리할 수 있다 . 그래서 웹 프로그래밍에서도

데이터베이스를 사용해야 할 경우가 많이 있는데 이번 장에서는 그 방법을

배워보자 .

내용 데이터베이스에 대하여 MySQL 설치하기 Connector/J 설치하기 웹 컴포넌트에서 데이터베이스를 사용하는 방법 데이터베이스 커넥션 풀의 설치와 사용

3/85

데이터베이스 (database) 는 파일과 마찬가지로 보조기억장치에 데이터를 저장하는

수단이다 . 데이터베이스는 크게 계층형 데이터베이스 , 관계형 데이터베이스 , 객체지향

데이터베이스로 구분되는데 , 이 책에서는 그 중 관계형 테이터베이스인 MySQL 을

사용할 것이다 . 자바 프로그램에서 MySQL 을 사용하려면 JDBC 드라이버가 필요하다 .

1. 데이터베이스에 대하여

[ 그림 12-1] JDBC 드라이버의 역할

4/85

MySQL 다운로드 받기 웹 브라우저를 열고 http://dev.mysql.com/downloads/라는 URL 을 입력하면 다음과 같은

웹 페이지가 나타난다 .

2. MySQL 설치하기

5/85

MySQL 다운로드 받기 앞 화면에서 가장 최신 버전인 MySQL 5.1 을 선택하면 화면이 다음과 같이 바뀐다 .

2. MySQL 설치하기

6/85

MySQL 다운로드 받기 앞 화면에서 Download 버튼을 누른다 .

2. MySQL 설치하기

7/85

MySQL 다운로드 받기 앞 화면에서 Windows 플랫폼을 선택하면 Windows 플랫폼에 맞는 MySQL 의 여러

에디션이 표시된 화면이 나타난다 .

2. MySQL 설치하기

8/85

MySQL 다운로드 받기 앞 화면에서 Pick a mirror 링크를 클릭하면 개인 정보를 입력하도록 권장하는 화면이

나타난다 .

2. MySQL 설치하기

9/85

MySQL 다운로드 받기 앞 화면 아래쪽의 ‘ No Thanks’ 로 시작하는 링크를 클릭하면 MySQL 을 다운로드 받을

수 있는 다음과 같은 웹 페이지가 나타난다 .

2. MySQL 설치하기

10/85

MySQL 다운로드 받기 앞 화면에서 HTTP 나 FTP 링크 중 하나를 선택하면 다음과 같은 창이 나타나는데 ,

여기에서 저장 버튼을 누르면 다운로드가 시작된다 .

2. MySQL 설치하기

11/85

MySQL 설치하기 다운로드 받은 파일을 더블 클릭하면 왼쪽 창이 나타나며 , ‘Next’ 버튼을 누르면 화면이

오른쪽 그림처럼 바뀐다 .

2. MySQL 설치하기

12/85

MySQL 설치하기 앞 화면에서 ‘ Typical’ 옵션을 선택하고 ‘ Next’ 버튼을 누르면 화면이 왼쪽 그림처럼

바뀌고 , ‘Install’ 버튼을 누르면 화면이 오른쪽 그림처럼 바뀌면서 설치가 진행된다 .

2. MySQL 설치하기

13/85

MySQL 설치하기 설치가 끝나면 왼쪽 화면이 나타나고 , ‘Next’ 버튼을 누르면 화면이 오른쪽 그림처럼

바뀐다 . 여기에서 ‘ Finish’ 버튼을 누르면 MySQL 의 구성 프로그램이 시작된다 .

2. MySQL 설치하기

14/85

MySQL 의 구성 정보 입력하기 MySQL 구성 프로그램이 시작되면 왼쪽 창이 나타나고 , ‘Next’ 버튼을 누르면 화면이

오른쪽 그림처럼 바뀐다 .

2. MySQL 설치하기

15/85

MySQL 의 구성 정보 입력하기 앞 화면에서 ‘ Next’ 버튼을 누르면 창이 왼쪽 그림처럼 바뀌는데 , MySQL 가 윈도우

서비스로서 실행되도록 만들기 위해 아래쪽 체크박스를 선택해서 오른쪽 그림처럼

만든다 .

2. MySQL 설치하기

16/85

MySQL 의 구성 정보 입력하기 앞 화면에서 ‘ Next’ 버튼을 누르면 창이 왼쪽 그림처럼 바뀌는데 , 여기에서 새로운 root

사용자 암호를 두 번 입력하고 ‘ Next’ 버튼을 누르면 화면이 오른쪽 그림처럼 바뀐다 .

• [ 주의 ] 암호는 나중에 필요하므로 잘 기억해둔다 .

2. MySQL 설치하기

17/85

MySQL 의 구성 정보 입력하기 앞 화면에서 ‘ Execute’ 버튼을 누르면 앞에서 구성 정보의 설정이 시작되고 , 설정이

끝나면 화면이 오른쪽 그림처럼 바뀐다 .

오른쪽 화면에서 ‘ Finish’ 버튼을 누르면 MySQL 구성 프로그램이 끝난다 .

2. MySQL 설치하기

18/85

MySQL 시작하기 윈도우즈 운영체제의 시작 메뉴에서 제어판 → 관리 도구 → 서비스를 선택한다 .

상태가 시작됨으로 표시되어 있지 않으면 MySQL 이 작동되지 않고 있는 것이다 . 그럴

때는 MySQL 항목을 더블 클릭해서 MySQL 속성 창을 연다 .

2. MySQL 설치하기

[ 그림 12-9] 윈도우즈 운영체제의 서비스로 등록된 MySQL

19/85

MySQL 시작하기 MySQL 속성 창의 중간쯤 보면 시작 , 중지 , 일시 중지 , 계속이라는 4 개의 버튼이

있는데 이 중 시작 버튼을 누르면 MySQL 이 시작된다 .

2. MySQL 설치하기

[ 그림 12-10] MySQL 서비스를 선택했을 때 나타나는 윈도우

20/85

데이터베이스 만들기 데이터베이스를 만들기 위해서는 MySQL 에 포함되어 있는 mysqladmin.exe 라는

프로그램을 이용해야 한다 . 이 프로그램은 명령 프롬프트 창에서 실행해야 하며 , 다음과 같은 형태의 명령을 입력해서 데이터베이스를 만들 수 있다 .

2. MySQL 설치하기

mysqladmin -u root -p create webdb

사용자의 ID가root 라는 뜻패스워드를 입력받겠다는 뜻

webdb 라는 이름의 데이터베이스를만들라는 뜻

① 데이터베이스를 생성하라는 명령을 입력합니다

② 패스워드를 입력합니다

[ 그림 12-11] 데이터베이스를 만드는 방법

21/85

데이터베이스에 데이터 저장하기 데이터베이스는 정형화된 구조의 데이터를 저장하기에 적합한 저장 수단이다 .

관계형 데이터베이스에 데이터를 저장할 때는 같은 구조를 갖는 데이터들끼리 모아

놓아야 하는데 , 이런 데이터의 모음을 테이블 (table) 이라고 한다 .

2. MySQL 설치하기

[ 그림 12-12] 관계형 데이터베이스에 저장하기에 적합한 데이터

22/85

데이터베이스에 데이터 저장하기 테이블을 생성하기 위해서는 먼저 테이블의 구조를 만들어야 하는데 , 이 구조는 데이터

항목의 이름 , 타입 , 최대 크기에 의해 정해진다 .

테이블을 설계한 다음에 해야 할 일은 데이터베이스 안으로 들어가서 실제로 테이블을

생성하는 것이다 . 그런 일은 mysql.exe 프로그램을 이용해서 할 수 있다 .

2. MySQL 설치하기

23/85

데이터베이스에 데이터 저장하기 데이터베이스에 들어가기 위해서는 명령 프롬프트 창에서 다음과 같은 명령을 입력해야

한다 .

• 위 명령을 입력하면 root 사용자의 암호를 묻는 프롬프트가 나타나고 , 암호를 입력하면 mysql> 프롬프트가 나타난다 .

mysql> 프롬프트 다음에 use 라는 명령을 다음과 같은 형식으로 입력하면

데이터베이스에 들어갈 수 있다 .

• 데이터베이스를 빠져나오려면 mysql> 프롬프트 다음에 quit 라고 입력하면 된다 .

2. MySQL 설치하기

mysql -u root -p

사용자의 ID가root 라는 뜻

패스워드를 입력받겠다는 뜻

use webdb

데이터베이스의 이름

24/85

데이터베이스에 데이터 저장하기

2. MySQL 설치하기

[ 그림 12-12] 데이터베이스에 들어가고 나오는 방법

1) mysql.exe 프로그램을 실행합니다 .

2) 패스워드를 입력합니다 .

3) use 명령을 이용해서 특정 데이터베이스로 들어갑니다 .4) quit 명령을 실행하면 mysql.exe 프로그램이 끝납니다 .

25/85

데이터베이스에 데이터 저장하기 테이블을 만들기 위해서는 데이터베이스 안으로 들어가서 다음과 같은 형식의 create

명령을 실행하면 된다 .

위 명령문을 이용하여 만든 테이블에는 필수 입력 데이터가 누락될 가능성이 있다 . 이런

문제를 방지하려면 필수 입력 데이터 항목 뒤에 not null 이라는 키워드를 붙이면 된다 .

2. MySQL 설치하기

create table goodsinfo (code char(5), title varchar(50), writer varchar(20), price int(8)) ;

create 문을 시작하는 키워드

테이블 이름

데이터 항목의 이름 , 타입 , 크기

모든 명령문의 끝에 반드시 써야 하는

세미콜론

create table goodsinfo ( code char(5) not null, title varchar(50) not null, writer varchar(20), price int(8) not null);

필수 데이터 항목 뒤에는not null 이라고 쓰세요 .

26/85

데이터베이스에 데이터 저장하기 키로 사용할 데이터 항목을 지정하려면 create 문의 마지막 데이터 항목 뒤에 콤마를

찍고 , primary key 라는 키워드와 함께 키 항목의 이름을 다음과 같이 쓰면 된다 .

특정 항목을 키를 지정할 때의 이점은 다음과 같다 . • 키로 지정된 항목에는 똑같은 데이터 값이 입력될 수 없기 때문에 그 항목을 식별자로 사용할 수

있다 .• 키로 지정된 항목의 인덱스 정보는 데이터베이스 안에 자동으로 생성되기 때문에 키를 이용한

검색 속도가 빨라진다 .

2. MySQL 설치하기

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 항목을 키로 지정하는 부분입니다

27/85

데이터베이스에 데이터 저장하기 다음 그림은 create 문을 이용해서 실제로 테이블을 만드는 예이다 .

2. MySQL 설치하기

[ 그림 12-13] 을 참조해서webdb 데이터베이스로 들어가세요

테이블을 생성하는 create 문을입력하세요 .

정상적으로 테이블이 만들어지면이런 메시지가 나옵니다 .

[ 그림 12-14] 테이블을 만드는 방법

28/85

데이터베이스에 데이터 저장하기 테이블이 올바르게 만들어졌는지 확인하기 위해서는 desc 명령을 사용하면 된다 .

2. MySQL 설치하기

테이블의 구조

[ 그림 12-15] 테이블의 구조를 확인하는 방법

29/85

데이터베이스에 데이터 저장하기 테이블에 데이터를 입력하려면 다음과 같은 형식의 insert 문을 쓰면 된다 .

• 문자 데이터는 반드시 작은따옴표로 묶어서 써야 한다 .

2. MySQL 설치하기

insert into goodsinfo (code, title, writer, price) values ( ‘10001 ’, ‘ 뇌를 자극하는 Java 프로그래밍 ’ , ‘김윤명 ’ , 27000);

[ 그림 12-16] 테이블에 데이터를 입력하는 방법

insert 문을 시작하는 키워드

테이블 이름

항목 이름

데이터키워드

30/85

데이터베이스에 데이터 저장하기 테이블에 저장한 데이터를 읽어오려면 다음과 같은 형식의 select 문을 이용하면 된다 .

다음과 같이 와일드카드 문자 (*) 를 쓰면 테이블의 모든 항목을 읽어올 수 있다 .

특정 데이터만 읽어오려면 테이블 이름 뒤에 다음과 같은 형식의 where 절을 쓰면 된다 .

2. MySQL 설치하기

select name, price from goodsinfo;

select 문을 시작하는 키워드

항목 이름 테이블 이름키워드

select * from goodsinfo;

모든 데이터 항목을 뜻하는와일드카드 문자

select * from goodsinfo where price > 20000;

키워드 검색 조건

31/85

데이터베이스에 데이터 저장하기

2. MySQL 설치하기

[ 그림 12-17] 테이블의 데이터를 조회하는 방법

32/85

데이터베이스에 데이터 저장하기 테이블에 있는 기존의 데이터를 수정하려면 다음과 같은 형식의 update 문을 쓰면 된다 .

2. MySQL 설치하기

update goodsinfo set writer:= ‘토마스 코멘 외 3 명 ’ , price:=33600 where code = ‘10005’;

update 문을 시작하는 키워드

테이블 이름

키워드

항목 이름 :=새로운 값

포맷으로 값을 지정

where 조건절

[ 그림 12-18] 테이블의 데이터를 수정하는 방법

33/85

데이터베이스에 데이터 저장하기 테이블에 있는 데이터를 삭제하기 위해서는 다음과 같은 형식의 delete 문을 사용하면

된다 .

2. MySQL 설치하기

delete from goodsinfo where code = ‘10005 ’;

delete 문을 시작하는 키워드

테이블 이름

where 조건절

[ 그림 12-19] 테이블의 데이터를 삭제하는 방법

34/85

JDBC 드라이버 다운로드 받기 웹 브라우저를 열고 http://dev.mysql.com/downloads/라는 URL 을 입력하면 다음과 같은

웹 페이지가 나타난다 .

3. Connector/J 설치하기

35/85

JDBC 드라이버 다운로드 받기 스크롤 바를 내리면 Connector/J 를 다운로드 받을 수 있는 링크들이 나타난다 .

3. Connector/J 설치하기

36/85

JDBC 드라이버 다운로드 받기 최신 버전의 Connector/J 에 대한 링크를 클릭해서 Connector/J 를 다운로드 받는다 .

3. Connector/J 설치하기

37/85

JDBC 드라이버 설치하기

3. Connector/J 설치하기

38/85

4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법

39/85

JDBC 드라이버를 로드하고 , 데이터베이스로 연결하고 , 연결을 끊는 방법

4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법

40/85

JDBC 드라이버를 로드하고 , 데이터베이스로 연결하고 , 연결을 끊는 방법

자바 프로그램에서 관계형 데이터베이스로 연결을 하기 위해서는 먼저 다음과 같은

방법으로 JDBC 드라이버를 로드해야 한다 .

데이터베이스로 연결을 하기 위해서는 먼저 프로토콜 , 서브프로토콜 , 서브네임으로

이루어진 데이터베이스 URL 을 알아두어야 한다 .

• 서브네임의 작성 방법은 DBMS 의 종류마다 다르므로 MySQL 이 아닌 다른 DBMS 를 사용할

때는 관련 매뉴얼을 찾아보아야 한다 .

4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법

jdbc:mysql://219.153.12.14:3306/webdb

프로토콜(protocol)

서브프로토콜(subprotocol)

서브네임 (subname)IP 주소 : 포트번호 /DB

이름

Class.forName(“com.mysql.jdbc.Driver”);

JDBC 드라이버의 클래스 이름

41/85

JDBC 드라이버를 로드하고 , 데이터베이스로 연결하고 , 연결을 끊는 방법

데이터베이스로 연결을 맺기 위해서는 java.sql.DriverManager 클래스의 getConnection

메서드를 호출해야 한다 .

• 이 메서드는 데이터베이스로의 연결에 성공하면 java.sql.Connection 인터페이스 타입의 객체를

만들어서 리턴한다 .

데이터베이스로의 연결을 끊기 위해서는 Connection 객체에 대해 close 메서드를

호출하면 된다 .

4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법

Connection conn = DriverManager.getConnection(“jdbc:mysql://219.153.12.14:3306/webdb ”, “root ”, “1234 ”);

데이터베이스 URL

사용자 ID 패스워드

conn.close()

데이터베이스로의

연결을 끊는 메서드

42/85

JDBC 드라이버를 로드하고 , 데이터베이스로 연결하고 , 연결을 끊는 방법

4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법

[예제 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 의 실행 결과

43/85

데이터베이스의 데이터를 읽어오는 방법 데이터베이스에 있는 데이터를 읽어오려면 우선 Connection 객체에 대해 createState-

ment 메서드를 호출해서 java.sql.Statement 타입 객체를 구해야 한다 .

Statement 객체에 대해 executeQuery 메서드를 호출하면 데이터베이스에 있는

데이터를 읽어올 수 있다 .

4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법

Statement stmt = conn.createStatement();

getConnection 메서드가

리턴한 Connection 객체

Statement 객체를 만들어서 리턴하는

메서드

ResultSet rs = stmt.executeQuery( “select * from goodsinfo where code=‘10002’; ”);

select 문을 실행하는 메서드

44/85

데이터베이스의 데이터를 읽어오는 방법 executeQuery 메서드가 리턴한 ResultSet 객체에 대해 next 메서드를 호출하면

데이터베이스로부터 읽은 데이터를 순서대로 가져올 수 있다 .

• 이 메서드는 다음 위치에 데이터가 있을 때는 true, 없을 때는 false 를 리턴한다 .

next 메서드를 호출한 다음에 ResultSet 객체에 대해 getInt, getString, getFloat 등의

메서드를 호출하면 특정 데이터 항목 값을 가져올 수 있다 .

4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법

boolean exists = rs.next();

데이터베이스로부터 읽은 데이터의첫 번째 / 다음 행 위치로 이동하는 메서드

String code = rs.getString( “code ”);

문자 데이터를 가져오는 메서드

int price = rs.getInt( “price ”);

정수 데이터를 가져오는 메서드

45/85

데이터베이스의 데이터를 읽어오는 방법 필요한 데이터를 모두 가져온 다음에는 ResultSet 객체가 더 이상 필요치 않기 때문에

close 메서드를 호출해야 한다 .

Statement 객체도 모두 사용하고 난 다음에는 close 메서드를 호출해서 닫아야 한다 .

4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법

rs.close();

ResultSet 을 닫는 메서드

stmt.close();

Statement 를 닫는 메서드

46/85

데이터베이스의 데이터를 읽어오는 방법

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)); request.setAttribute( “WRITER ”, toUnicode(writer)); request.setAttribute( “PRICE ”, new Integer(price)); } } finally { try { stmt.close(); } catch (Exception ignored) { } try { conn.close(); } catch (Exception ignored) { } } RequestDispatcher dispatcher = request.getRequestDispatcher(“GoodsInfoViewer.jsp”); dispatcher.forward(request, response);%>

<%! // ISO-8859-1 문자열을 Unicode 문자열로 바꾸는 메서드 private String toUnicode(String str) { try { byte[] b = str.getBytes( “ISO-8859-1 ”); return new String(b); } catch (java.io.UnsupportedEncodingException uee) { System.out.println(uee.getMessage()); return null; } }%>

47/85

데이터베이스의 데이터를 읽어오는 방법

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 의 실행 결과

48/85

데이터베이스에 데이터를 입력하는 방법 데이터베이스에 데이터를 입력하려면 데이터를 읽어올 때와 마찬가지로 우선 Statement

객체를 구해야 한다 .

Statement 객체에 대해 executeUpdate 라는 메서드를 호출하면 데이터베이스에 새로운

데이터를 추가할 수 있다 .

executeUpdate 메서드를 이용해서 데이터를 입력한 다음에는 Statement 객체에 대해

close 메서드를 호출해야 한다 .

4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법

Statement stmt = conn.createStatement();

Statement 객체를 만드는 메서드

int rowNum = stmt.executeUpdate(

“insert goodsinfo (code, title, writer, price) values(‘10001’, ‘ 뇌를 자극하는 Java 프로그래밍’ , ‘김윤명’ , 27000);”);

insert 문을 실행하는 메서드

49/85

데이터베이스에 데이터를 입력하는 방법

4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법

[ 그림 12-13] 을참조해서 webdb데이터베이스로들어가세요

테이블을 생성하는 create문을 입력하세요정상적으로 테이블이

만들어지면이런 메시지가 나옵니다

mysql.exe 를 끝내세요

[ 그림 12-28] 회원 정보 테이블을 만드는 방법

50/85

데이터베이스에 데이터를 입력하는 방법 다음과 같이 작동하는 회원 가입 애플리케이션을 만들어보자 .

4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법

[ 그림 12-29] 회원 가입 애플리케이션의 화면 설계

② 해당 정보가 DB 에 입력된 후 결과 화면이 나타납니다 .

① 회원 정보를 입력하고

‘확인’ 버튼을 누르면

51/85

데이터베이스에 데이터를 입력하는 방법 이 애플리케이션은 다음과 같은 세 개의 모듈로 구현한다 .

HTML 문서와 JSP 페이지의 URL 은 다음과 같이 정하기로 한다 .

4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법

http://localhost:8080/brain12/SubscriptionForm.html

회원 정보 입력 화면HTML 문서의 URL

http://localhost:8080/brain12/Subscription.jsp

회원 정보 DB 입력JSP 페이지의 URL

http://localhost:8080/brain12/SubscriptionResult.jsp

회원 가입 결과 출력JSP 페이지의 URL

52/85

데이터베이스에 데이터를 입력하는 방법

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>

53/85

데이터베이스에 데이터를 입력하는 방법

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 ”);%>

54/85

데이터베이스에 데이터를 입력하는 방법

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 의 실행 결과

55/85

데이터베이스에 데이터를 입력하는 방법

4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법

[ 그림 12-32] 예제 12-5 ~ 예제 12-7 의 결과를 확인하는 방법

3) 입력된 데이터를 확인할 수 있습니다 .

1) webdb 데이터베이스로 들어가십시오 .

2) 회원 정보 테이블을 조회하는 select 문을 입력하십시오 .

56/85

데이터베이스의 데이터를 수정하고 삭제하는 방법 데이터베이스에 있는 데이터를 수정할 때는 executeUpdate 메서드에 update 문을

파라미터로 넘겨줘야 한다 .

데이터베이스에 있는 데이터 삭제할 때는 executeUpdate 메서드에 delete 문을

파라미터로 넘겨줘야 한다 .

4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법

int rowNum = stmt.executeUpdate( “update userinfo set password :=‘dalek’ where id = ‘rose ’; ”);

이 메서드를 이용해서 update 문을 실행할 수 있습니다

int rowNum = stmt.executeUpdate( “delete from userinfo where id = ‘rose ’; ”);

이 메서드를 이용해서 delete 문을 실행할 수도 있습니다 .

57/85

데이터베이스의 데이터를 수정하고 삭제하는 방법 데이터베이스에 저장되어 있는 상품 정보를 수정하는 애플리케이션을 작성해보자 .

4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법

초기 화면

상품 정보 편집 화면

상품 정보 수정 결과 화면

[ 그림 12-33] 상품 정보 수정 애플리케이션의 화면 설계

58/85

데이터베이스의 데이터를 수정하고 삭제하는 방법 앞 애플리케이션을 다음과 같은 5 개의 모듈로 구성하기로 하자 .

4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법

http://localhost:8080/brain12/GIM/InitForm.html

상품코드 입력 화면HTML 문서의 URL

http://localhost:8080/brain12/GIM/Reader.jsp

상품 정보 DB 읽기JSP 페이지의 URL

http://localhost:8080/brain12/GIM/EditForm.jsp

상품 정보 편집 화면JSP 페이지의 URL

http://localhost:8080/brain12/GIM/Updater.jsp

상품 정보 DB 수정JSP 페이지의 URL

http://localhost:8080/brain12/GIM/UpdateResult.jsp

상품 정보 수정 결과JSP 페이지의 URL

59/85

데이터베이스의 데이터를 수정하고 삭제하는 방법

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>

60/85

데이터베이스의 데이터를 수정하고 삭제하는 방법

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)); } finally { try { stmt.close(); } catch (Exception ignored) { } try { conn.close(); } catch (Exception ignored) { } } RequestDispatcher dispatcher = request.getRequestDispatcher( “EditForm.jsp ”); dispatcher.forward(request, response);%>

<%! // ISO-8859-1 문자열을 Unicode 문자열로 바꾸는 메서드 private String toUnicode(String str) { try { byte[] b = str.getBytes( “ISO-8859-1 ”); return new String(b); } catch (java.io.UnsupportedEncodingException uee) { System.out.println(uee.getMessage()); return null; } }%>

61/85

데이터베이스의 데이터를 수정하고 삭제하는 방법

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>

62/85

데이터베이스의 데이터를 수정하고 삭제하는 방법

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);%>

63/85

데이터베이스의 데이터를 수정하고 삭제하는 방법

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>

64/85

데이터베이스의 데이터를 수정하고 삭제하는 방법

4. 웹 컴포넌트에서 데이터베이스를 사용하는 방법

65/85

데이터베이스에 동시에 접속할 수 있는 사용자 수는 한정되어 있는데 , 웹 서버에는

동시에 수백 , 수천의 사용자들이 접속할 수 있다 . 웹 애플리케이션이 실행될 때마다 데이터베이스로 새로운 접속을 맺는 것은 현실적으로

불가능하므로 , 데이터베이스 몇 개의 접속을 맺어서 데이터베이스 커넥션 풀 (Database

Connection Pool) 에 저장해놓고 , 필요한 웹 애플리케이션이 빌려 쓰고 반환하는 방식을

사용해야 한다 .

5. 데이터베이스 커넥션 풀의 설치와 사용

66/85

DBCP, Pool, Collections 모듈 다운로드 받기 웹 브라우저를 열고 아파치 사이트의 URL 인 http://www.apache.org/를 입력한다 .

5. 데이터베이스 커넥션 풀의 설치와 사용

67/85

DBCP, Pool, Collections 모듈 다운로드 받기 앞 화면에서 Commons 프로젝트를 선택한다 .

5. 데이터베이스 커넥션 풀의 설치와 사용

68/85

DBCP, Pool, Collections 모듈 다운로드 받기 DBCP 링크를 클릭하여 모듈을 찾아서 다운로드 한다 .

5. 데이터베이스 커넥션 풀의 설치와 사용

69/85

DBCP, Pool, Collections 모듈 다운로드 받기 Pool 링크를 클릭하여 모듈을 찾아서 다운로드 한다 .

5. 데이터베이스 커넥션 풀의 설치와 사용

70/85

DBCP, Pool, Collections 모듈 다운로드 받기 Collections 링크를 클릭하여 모듈을 찾아서 다운로드 한다 .

5. 데이터베이스 커넥션 풀의 설치와 사용

71/85

DBCP, Pool, Collections 모듈 설치하기

5. 데이터베이스 커넥션 풀의 설치와 사용

72/85

데이터베이스 커넥션 풀을 사용하는 방법 데이터베이스 커넥션 풀을 이용해서 데이터베이스에 데이터를 읽고 쓰는 방법은

데이터베이스 커넥션 풀을 사용하지 않을 때와 비슷하다 . 차이점이라면 Class.forName

과 DriverManager, getConnection 메서드에 넘겨주는 파라미터 값이 다르다는 정도이

다 .

5. 데이터베이스 커넥션 풀의 설치와 사용

[ 그림 12-44] 데이터베이스 커넥션 풀을 통해 데이터베이스를 사용하는 방법

73/85

데이터베이스 커넥션 풀을 생성하고 등록하는 프로그램의 작성 방법 데이터베이스 커넥션 풀을 만들기 위해서는 우선 org.apache.commons.pool.impl

패키지에 속하는 GenericObjectPool 클래스나 StackObjectPool 클래스의 객체를

만들어야 한다

• GenericObjectPool 클래스는 데이터베이스 커넥션 풀을 표현하는 것이 아니라 일반 자바 객체를

담는 풀을 표현한다 .

데이터베이스 커넥션을 생성하는 기능의 객체는 DBCP 모듈에 속하는 org.apache.-

commons.dbcp 패키지의 DriverManagerConnectionFactory 클래스를 이용해서 만들 수

있다 .

5. 데이터베이스 커넥션 풀의 설치와 사용

GenericObjectPool objectPool = new GenericObjectPool();

GenericObjectPool 객체를 생성합니다 .

DriverManagerConnectionFactory connectionFactory = new DriverManagerConnectionFactory( “jdbc:mysql://localhost:3306/webdb ”, “root ”, “1234 ”);

데이터베이스 URL 아이디 패스워

74/85

데이터베이스 커넥션 풀을 생성하고 등록하는 프로그램의 작성 방법 앞에서 만든 두 객체가 함께 작동하도록 만들기 위해서는 다음과 같은 방법으로 org.a-

pache.commons.dbcp 패키지에 속하는 PoolableConnectionFactory 클래스의 객체를

만들어야 한다 .

그 다음에 할 일은 PoolingDriver 객체를 생성해서 GenericObjectPool 객체를 웹

컨테이너에 등록하는 것이다 .

5. 데이터베이스 커넥션 풀의 설치와 사용

new PoolableConnectionFactory(connectionFactory, objectPool, null, null, false, true);

DriverManagerConnectionFactory 객체

GenericObjectPool 객체

PoolingDriver driver = new PoolingDriver();

PoolingDriver 객체를 생성한다

driver.registerPool( “/webdb_pool ”, objectPool);

데이터베이스 커넥션 풀의 이름

GenericObjectPool 객체

75/85

데이터베이스 커넥션 풀을 생성하고 등록하는 프로그램의 작성 방법

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 의 실행 결과

76/85

데이터베이스 커넥션 풀을 생성하고 등록하는 프로그램의 작성 방법

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 의 실행 결과 - 에러가 발생했을 때

77/85

데이터베이스 커넥션 풀을 생성하고 등록하는 프로그램의 작성 방법

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)); request.setAttribute( “PRICE ”, new Integer(price)); } } finally { try { stmt.close(); } catch (Exception ignored) { } try { conn.close(); } catch (Exception ignored) { } } RequestDispatcher dispatcher = request.getRequestDispatcher( “GoodsInfoViewer.jsp ”); dispatcher.forward(request, response);%>

<%! // ISO-8859-1 문자열을 Unicode 문자열로 바꾸는 메서드 private String toUnicode(String str) { try { byte[] b = str.getBytes( “ISO-8859-1 ”); return new String(b); } catch (java.io.UnsupportedEncodingException uee) { System.out.println(uee.getMessage()); return null; } }%>

78/85

데이터베이스 커넥션 풀을 생성하고 등록하는 프로그램의 작성 방법

5. 데이터베이스 커넥션 풀의 설치와 사용

[ 그림 12-48] 예제 12-15 의 실행 결과 - 올바른 결과

[ 그림 12-49] 예제 12-15 의 실행 결과 - 에러가 발생했을 때

79/85

데이터베이스 커넥션 풀을 생성하고 등록하는 프로그램의 작성 방법

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 페이지가 초기화되도록 만드는 방법

웹 컨테이너가 시작될 때 서블릿이 초기화되도록

만드는 값

80/85

JOCL 파일을 이용한 데이터베이스 커넥션 풀 생성 방법 JOCL 파일을 이용하면 프로그램을 작성하지 않고 DBCP 데이터베이스 커넥션 풀을

생성하고 등록할 수 있다 .

위 코드를 자세히 살펴보면 DBCP 데이터베이스 커넥션 풀을 생성하고 등록하는

프로그램과 동일한 부분이 많이 있음을 알 수 있다 . JOCL 파일은 WEB-INF/classes 서브디렉터리 안에 저장해야 한다 .

5. 데이터베이스 커넥션 풀의 설치와 사용

[ 그림 12-51] JOCL 파일의 예

81/85

JOCL 파일을 이용한 데이터베이스 커넥션 풀 생성 방법

5. 데이터베이스 커넥션 풀의 설치와 사용

82/85

JOCL 파일을 이용한 데이터베이스 커넥션 풀 생성 방법 JOCL 파일을 사용할 때는 앞에서 설치했던 JDBC 드라이버 , DBCP, Pool, Collections

모듈을 JOCL 파일이 속하는 웹 애플리케이션 디렉터리의 WEB-INF/lib 디렉터리로

옮겨와야 한다 .

5. 데이터베이스 커넥션 풀의 설치와 사용

83/85

JOCL 파일을 이용한 데이터베이스 커넥션 풀 생성 방법

5. 데이터베이스 커넥션 풀의 설치와 사용

[예제 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 의 실행 결과

84/85

JOCL 파일을 이용한 데이터베이스 커넥션 풀 생성 방법

5. 데이터베이스 커넥션 풀의 설치와 사용

[예제 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 ”);%>

85/85

5. 데이터베이스 커넥션 풀의 설치와 사용

JOCL 파일을 이용한 데이터베이스 커넥션 풀 생성 방법

[ 그림 12-55] 예제 12-15, 예제 12-18, 예제 12-7 의 실행 결과

뇌를 자극하는 JSP & Servlet