메뉴 건너뛰기

조회 수 37896 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

JSP 게시판 만들기 - 구현 (MySQL과의 연동)

 

게시판의 데이터를 불러오거나 저장하기 위해서는 데이터베이스가 필요하다. 지금 MySQL을 사용해서 데이터를 저장하게 되는 데 이러한 데이터베이스와의 접속 후 질의문을 통해 데이터를 얻는 과정을 알아보자. 목록, 보기, 수정, 삭제, 등록 등 공통된 부분과 차이점에 대해 알아볼 것이다.

 

MySQL Connector 라이브러리 추가

이전에도 설명했지만 데이터베이스와 연동하기 위해서는 커넥터 라이브러리가 필요하다. 어떠한 데이터베이스를 접속하던 지 꼭 필수 파일인데 해당 데이터베이스 사이트에서 받을 수 있다. 

http://dev.mysql.com/downloads/connector/

다양한 언어별로 커넥터를 제공해 준다. 우린 자바를 하니까~

 

 

ZIP 파일로 된 파일을 Download!

 

 

로그인 하지 않고 다운로드

 

 



다운로드가 완료된 파일을 압축풀면 아래와 같이 커넥터 라이브러리 파일이 있다. 이 파일은 *.jar 파일로 되어 있다.
 

 

이 파일을 프로젝트 WebContent/WEB-INF/lib  디렉토리에 넣자. 이 lib 디렉토리는 library 의 약자로, 자주 사용되는 모듈화된 파일들을 모아둔다. 여기에 있는 라이브러리를 웹 프로젝트내에서 쉽게 빼다 쓸 수 있게 된다.

 

 

Tip - jar 파일이란?

Java Archive 의 약어로, 자바프로그램 즉 클래스파일들이 뭉쳐있는 압축된 파일이다. 이 압축은 압축 프로그램 (알집, 빵집 등)으로 압축 및 압축을 풀 수 있다. 주로 사용하는 클래스파일들을 압축하여 lib 디렉토리에 넣은 후 사용하게 된다. 대부분의 프레임워크 (Spring, iBatis, Struts 등)들이 이런 *jar파일 형태로 배포되어 사용되어진다.

 

 

 

JSP내에서 MySQL과 연동

데이터베이스 관련 클래스들을 사용해야 하기 때문에 사용할 클래스들이 있는 패키지를 불러오자. 위에서 말한 *.jar 파일들이 있는 위치를 불러오는 것이다.

 

     // java.sql 패키지 안에 있는 모든 클래스들을 IMPORT 시키는 의미

    <%@ page import="java.sql.*" %>

 

 

목록조회 (SELECT) 에 대한 예제

 

    // 데이터베이스 접속을 위한 클래스

    Connection conn = null;

    // 접속 후 질의문을 실행시킬 클래스

    PreparedStatement pstmt = null;

    // 질의문에 대한 결과값이 있는 클래스

    ResultSet rs = null;

    try {

       // MySQL Driver 를 불러 들인다.

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

       // 데이터베이스 커넥션을 위한 정보를 인자로 넘기며 커넥션을 얻는다.

       conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/stone", "root", "1234");

       // 커넥션 객체를 얻은 후 질의문을 데이터베이스에 요청 한다.

       pstmt = conn.prepareStatement("SELECT NUM, SUBJECT, WRITER FROM BOARD");

       // 요청한 질의문을 실행 후 결과값을 받는다.

       rs = pstmt.executeQuery();

       while(rs.next()) {

          // 검색된 게시물의 결과값을 표시

       }

    // try 문 내에서 예외상황이 발생 했을 시 실행

    } catch (Exception e) {

       e.printStackTrace();

    // try, catch 문 실행 완료 후 실행되는 데 사용객체들을 닫아준다.

    } finally {

       if (rs != null) rs.close();

       if (pstmt != null) pstmt.close();

       if (conn != null) conn.close();

    }

 

 

상세조회 (SELECT) 에 대한 예제

 

    // 데이터베이스 접속을 위한 클래스

    Connection conn = null;

    // 접속 후 질의문을 실행시킬 클래스

    PreparedStatement pstmt = null;

    // 질의문에 대한 결과값이 있는 클래스

    ResultSet rs = null;

    try {

       // MySQL Driver 를 불러 들인다.

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

       // 데이터베이스 커넥션을 위한 정보를 인자로 넘기며 커넥션을 얻는다.

       conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/stone""root""1234");

       // 커넥션 객체를 얻은 후 질의문을 데이터베이스에 요청 한다.

       pstmt = conn.prepareStatement("SELECT * FROM BOARD WHERE NUM = ?");

       // 값을 바인딩

       pstmt.setString(1, num);

       // 요청한 질의문을 실행 후 결과값을 받는다.

       rs = pstmt.executeQuery();

       rs.next();

    // try 문 내에서 예외상황이 발생 했을 시 실행

    } catch (Exception e) {

       e.printStackTrace();

    // try, catch 문 실행 완료 후 실행되는 데 사용객체들을 닫아준다.

    } finally {

       if (rs != null) rs.close();

       if (pstmt != null) pstmt.close();

       if (conn != null) conn.close();

    }

 

 

등록 (INSERT) 에 대한 예제

    // 데이터베이스 접속을 위한 클래스

    Connection conn = null;

    // 접속 후 질의문을 실행시킬 클래스

    PreparedStatement pstmt = null;

    try {

       // MySQL Driver 를 불러 들인다.

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

       // 데이터베이스 커넥션을 위한 정보를 인자로 넘기며 커넥션을 얻는다.

       conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/stone""root""1234");

       // 커넥션 객체를 얻은 후 질의문을 데이터베이스에 요청 한다.

       pstmt = conn.prepareStatement(

          "INSERT INTO BOARD ( SUBJECT, WRITER, REG_DATE ) VALUES ( ?, ?, NOW())");

       // 값을 바인딩

       pstmt.setString(1, subject);

       pstmt.setString(2, writer);

       // 요청한 질의문을 실행 후 결과값을 받는다.

       pstmt.executeUpdate();

    // try 문 내에서 예외상황이 발생 했을 시 실행

    } catch (Exception e) {

       e.printStackTrace();

    // try, catch 문 실행 완료 후 실행되는 데 사용객체들을 닫아준다.

    } finally {

       if (pstmt != null) pstmt.close();

       if (conn != null) conn.close();

    }

 

수정 (UPDATE) 에 대한 예제

    // 데이터베이스 접속을 위한 클래스

    Connection conn = null;

    // 접속 후 질의문을 실행시킬 클래스

    PreparedStatement pstmt = null;

    try {

       // MySQL Driver 를 불러 들인다.

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

       // 데이터베이스 커넥션을 위한 정보를 인자로 넘기며 커넥션을 얻는다.

       conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/stone""root""1234");

       // 커넥션 객체를 얻은 후 질의문을 데이터베이스에 요청 한다.

       pstmt = conn.prepareStatement(

         "UPDATE BOARD SET SUBJECT = ?, WRITER = ?, MOD_DATE = NOW() WHERE NUM = ?");

       // 값을 바인딩

       pstmt.setString(1, subject);

       pstmt.setString(2, writer);

       pstmt.setInt(3, num);

       // 요청한 질의문을 실행 후 결과값을 받는다.

       pstmt.executeUpdate();

    // try 문 내에서 예외상황이 발생 했을 시 실행

    } catch (Exception e) {

       e.printStackTrace();

    // try, catch 문 실행 완료 후 실행되는 데 사용객체들을 닫아준다.

    } finally {

       if (pstmt != null) pstmt.close();

       if (conn != null) conn.close();

    }

 

삭제 (DELETE) 에 대한 예제

    // 데이터베이스 접속을 위한 클래스

    Connection conn = null;

    // 접속 후 질의문을 실행시킬 클래스

    PreparedStatement pstmt = null;

    try {

       // MySQL Driver 를 불러 들인다.

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

       // 데이터베이스 커넥션을 위한 정보를 인자로 넘기며 커넥션을 얻는다.

       conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/stone""root""1234");

       // 커넥션 객체를 얻은 후 질의문을 데이터베이스에 요청 한다.

       pstmt = conn.prepareStatement(

         "DELETE FROM BOARD WHERE NUM = ?");

       // 값을 바인딩

       pstmt.setInt(1, num);

       // 요청한 질의문을 실행 후 결과값을 받는다.

       pstmt.executeUpdate();

    // try 문 내에서 예외상황이 발생 했을 시 실행

    } catch (Exception e) {

       e.printStackTrace();

    // try, catch 문 실행 완료 후 실행되는 데 사용객체들을 닫아준다.

    } finally {

       if (pstmt != null) pstmt.close();

       if (conn != null) conn.close();

    }

 

간단하게 CRUD(등록, 보기, 수정, 삭제, 목록보기)의 기능들이 완료되었다. 위의 소스들을 보게되면 비슷한 부분들이 참 많다. 즉, 데이터베이스의 연동 부분은 똑같고, 질의문과 질의문을 실행시키는 함수의 차이가 있을 뿐이다. 더 쉽게 이해하기 위해 정리해보자.

기능들의 공통된 소스

 

    // 데이터베이스 접속을 위한 클래스

    Connection conn = null;

    // 접속 후 질의문을 실행시킬 클래스

    PreparedStatement pstmt = null;

    try {

       // MySQL Driver 를 불러 들인다.

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

       // 데이터베이스 커넥션을 위한 정보를 인자로 넘기며 커넥션을 얻는다.

       conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/stone""root""1234");

       // 커넥션 객체를 얻은 후 질의문을 데이터베이스에 요청 한다.

       pstmt = conn.prepareStatement("질의문");

    // try 문 내에서 예외상황이 발생 했을 시 실행

    } catch (Exception e) {

       e.printStackTrace();

    // try, catch 문 실행 완료 후 실행되는 데 사용객체들을 닫아준다.

    } finally {

       if (pstmt != null) pstmt.close();

       if (conn != null) conn.close();

    }

 

 

이 공통된 부분들만 제외하면 이 CRUD 기능들이 얼마나 간단한지 대략 알 수 있다. 자 그럼 공통되지 않는 부분은 두개로 나뉠 수 있다.

조회 (SELECT) 의 경우

 

    ...

    ResultSet rs = null;

    try {

       ...

       pstmt = conn.prepareStatement("SELECT 질의문");

       ...

       rs = pstmt.executeQuery();

       rs.next();

    } catch (Exception e) {

       ..

    } finally {

       if (rs != null) rs.close();

       ..

    }

 

 

등록(INSERT), 수정(UPDATE), 삭제(DELETE) 의 경우

 

    ...

    try {

       ...

       pstmt = conn.prepareStatement("INSERT or UPDATE or DELETE 질의문");

       ...

       pstmt.executeUpdate();

    } catch (Exception e) {

       ..

    } finally {

       ..

    }

 

 

얼마나 단순한가? 크게는 executeQuery() or executeUpdate() 차이 이다. 이러한 차이를 알고 개발한다면 데이터베이스의 테이블에 값을 조회하거나 등록하는 건 금방 기능구현이 된다. 다음은 더 기초적이고 개념적인 것에 대해 정리해야지~ 


  1. Oracle Database DB연결, table 생성

    Date2017.09.11 Views4266
    Read More
  2. JSP 동작 원리, 내부 객체

    Date2017.09.12 Views3579
    Read More
  3. 스크립틀릿(Scriptlet), 선언(declaration), 표현식(expression)

    Date2017.09.12 Views3637
    Read More
  4. 지시자(Directive)

    Date2017.09.12 Views3123
    Read More
  5. 주석(comments)

    Date2017.09.12 Views3114
    Read More
  6. request, response

    Date2017.09.12 Views3220
    Read More
  7. JSP 게시판 만들기 - 구현 (이클립스 웹 프로젝트 생성)

    Date2017.09.12 Views4885
    Read More
  8. JSP 게시판 만들기 - 구현 (이클립스 웹 프로젝트 생성)

    Date2017.09.12 Views13395
    Read More
  9. JSP 게시판 만들기 - 개발표준, 화면설계

    Date2017.09.12 Views6597
    Read More
  10. JSP 게시판 만들기 - 시스템 아키텍처

    Date2017.09.12 Views4781
    Read More
  11. JSP (Java Server Page), Servlet에 대해

    Date2017.09.12 Views6710
    Read More
  12. JSP 게시판 만들기 - 네이밍, 데이터베이스 설계

    Date2017.09.12 Views4981
    Read More
  13. JSP 게시판 만들기 - 구현 (웹 프로젝트와 톰켓 연동, 샘플 페이지 작성)

    Date2017.09.12 Views5185
    Read More
  14. JSP 게시판 만들기 - 구현 (디렉토리, 파일, 테이블 생성)

    Date2017.09.12 Views7909
    Read More
  15. JSP 게시판 만들기 - 구현 (HTML 코딩)

    Date2017.09.12 Views17066
    Read More
  16. JSP 게시판 만들기 - 구현 (MySQL과의 연동)

    Date2017.09.12 Views37896
    Read More
  17. JSP 게시판 만들기 - 구현 (Method, Query 기초)

    Date2017.09.12 Views30633
    Read More
  18. JSP 게시판 만들기 - 구현 (파라미터, 요청/응답)

    Date2017.09.12 Views4799
    Read More
  19. JSP 게시판 만들기 - 구현 (마무리, 테스트)

    Date2017.09.12 Views6581
    Read More
  20. JSP 게시판 만들기 - 완료 (소스파일, 의견)

    Date2017.09.12 Views5511
    Read More
Board Pagination Prev 1 2 3 4 Next
/ 4

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved