posted by changhozz 2012. 10. 5. 20:25

JSP에서 JDBC 프로그래밍하기.

JDBC( Java DataBase Connectivity)는 자바에서 데이터베이스와 관련된
작업을 처리할 수 있도록 도와주는 API이다.

JDBC의 구조는

자바어플리케이션    ㅡ> JDBC API  ㅡ> JDBC드라이버  ㅡ> 데이터베이스 
(우린 JSP일테고)

이런식이다.

각각의 DBMS는 자신에게 알맞은 JDBC 드라이버(클래스 형태로 존재하면 일반적으로 Jar파일로 제공됨)를 제공하고 있으며, JDBC API는 JDBC 드라이버를 거쳐 데이터베이스와 통신을 한다.

나같은 경우는 mysql-connector-java-5.1.22.zip파일을 받았는데
압축을 풀게되면 mysql-connector-java-5.1.22-bin.jar 파일이 있다.
이 jar파일을 원하는프로젝트/WEB-INF/lib 디렉터리에 복붙하면된다.

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

JDBC 프로그래밍의 코딩 스타일

JDBC 프로그램의 일바너인 실행 순서 ㅡ>

1.JDBC 드라이버로딩
2.데이터페이스 커넥션 구함
3.쿼리 실행을 위한 Statement 객체 생성
4.쿼리 실행
5.쿼리 실행 결과 사용
6 Statement 종료
7.데이터베이스 커넥션 종료

 

 

// 1. JDBC 드라이버 로딩

Class.forName("com.mysql.jdbc.Driver");

Connection conn = null; Statement stmt = null; ResultSet rs = null;

    try {

        // 2. 데이터베이스 커넥션 생성

     conn = DriverManager.getConnection(""jdbc:mysql://localhost:3306/chap12", "user", "pass");

        // 3. Statement 생성

        stmt = conn.createStatement();

        // 4. 쿼리 실행

        rs = stmt.executeQuery("select * from MEMBER order by MEMBERID");

        // 5. 쿼리 실행 결과 출력

        while(rs.next()) {

             String name = rs.getString(1);

        }

    } catch(SQLException ex) {

        ex.printStackTrace();

    } finally {

        // 6. 사용한 Statement 종료

        if (rs != null) try { rs.close(); } catch(SQLException ex) {}

        if (stmt != null) try { stmt.close(); } catch(SQLException ex) {}

        // 7. 커넥션 종료

        if (conn != null) try { conn.close(); } catch(SQLException ex) {}

    }

 

 

 

DBMS와의 통신을 위한 JDBC 드라이버.

여기서 Class.forName("여기안에는 JDBC드라이버 클래스의 완전한 이름"); 이들어간다.
나같은 경우는 MySQL을 사용하므로 MySQL에 대한 JDBC 드라이버에 해당하는 클래스를 입력하면된다. 그것이 바로 com.mysql.jdbc.Driver 이다.

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

데이터베이스 식별을 위한 JDBC URL

데이터베이스를 구분할 때에도 URL과 비슷한 형식을 취하는 JDBC URL을 사용한다.
MySQL JDBC 드라이버는 다음과 같은 JDBC URL을 사용한다.

jdbc:mysql://HOST[:PORT]/DBNAME[?param=value&param1=value2&...]
여기서 [HOST]는 MySQL 서버의 호스트 주소를 나타내며, [DBNAME]은 데이터베이스 이름을 나타낸다. [PORT]는 MySQL 서버가 사용하는 포트 번호를 나타낸다. JDBC URL뒤에 몇 가지 설정 정보를
추가할 수 있으며, 표현 방식은 파라미터와 동일하다.

ex)
jdbc:mysql://locallhost:3303/test(DB명임)?useUnicode=true&characterEncoding=euckr

MySQL JDBC 드라이버가 MySQL 서버와 데이터를 주고 받을 때 사용되는 캐릭터 셋을
올바르게 지정하지 않을 경우 한글이나 한자와 같은 글자가 잘못된 값으로 데이터베이스에
저장될 수 있다. 따라서 MySQL에서 한글 데이터를 올바르게 하기 위해서는 위에와 같이
추가 파라미터를 이용해서 캐릭터 셋을 알맞게 지정해 주어야한다.

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

데이터베이스 커넥션

데이터베이스 프로그래밍을 하기 위해서는 먼저 데이터베이스와 연결된 커넥션을 구해야한다.
java.sql.Connection 클래스가 데이터베이스 커넥션을 나타내며, 커낵션은 java.sql.DriverManager
클래스가 제공하는 getConnection() 메서드를 사용해서 구할 수 있다.
DriverManager 클래스는 다음과 같은 두 개의 getConnection()메서드를 제공하고 있다.

DriverManager.getConnection(String jdbcURL)
DriverManager.getConnection(String jdbc URL, String user, String password)

JDBC URL과 데이터베이스 사용자 계정/아이디를 올바르게 지정했다면, DriverManager.getConnection() 메서드는 Connection 객체를 리턴한다.
리턴받은 Connection 객체를 사용해서 필요한 작업을 시작할 수 있는 것 이다.

*여기서 주의할 점*
Connection 객체를 다 사용한 뒤에는 close() 메서드를 호출하여 Connection 객체가 사용한 시스템
자원을 반환해 주어야 한다. 그렇지 않을 경우 시스템 자원이 불필요하게 소모되어 커넥션을 구할 수 없는 상황이 발생할 수도 있다.
Connection을 줄때 try문으로 묶은뒤 finally에서 close()를 사용하여 닫아주면된다.

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

Statement를 사용한 쿼리 실행

Connection 객체를 생성한 후에는 Connection으로부터 Statement를 생성한 뒤에 쿼리를 실행할 수 있다. Statement는 다음과 같이 Connection.createStatement() 메서드를 사용하여 생성할 수 있다.

Statement stmt = conn.createStatement();
여기서 conn은 Connection의 객체임.

위와 같이 Statement 클래스를 생성한 다음에는 다음의 두 메서드를 사용해서 쿼리를 실행 할 수 있다.

(리턴값 : ResultSet) executeQuery(String query) : SELECT 쿼리를 실행한다.     
(리턴값 :int)  executeUpdate(String query) : INSERT , UPDATE, DELETE 쿼리를 실행한다. 

executeUpdate()메서드는 리턴값이 int인 이유는 변경된 (또는 삽입된) 레코드의 개수를 리턴하기 때문

 

 

'JSP > JSP 수업' 카테고리의 다른 글

네번째 수업.  (0) 2012.09.13
jsp 세번째수업  (0) 2012.09.11
두번째 수업 (추가정리).  (0) 2012.09.07
두번째 수업.  (0) 2012.09.07
첫번째 수업.  (0) 2012.09.03