메뉴 건너뛰기

조회 수 37895 추천 수 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() 차이 이다. 이러한 차이를 알고 개발한다면 데이터베이스의 테이블에 값을 조회하거나 등록하는 건 금방 기능구현이 된다. 다음은 더 기초적이고 개념적인 것에 대해 정리해야지~ 


List of Articles
번호 제목 날짜 조회 수
45 JSP 동작 원리, 내부 객체 file 2017.09.12 3579
44 request, response file 2017.09.12 3220
43 지시자(Directive) file 2017.09.12 3123
42 주석(comments) file 2017.09.12 3114
41 파라미터를 배열 형식으로 받기 2021.03.25 1428
40 MVC 패턴 & 도서 목록 컨트롤러에서 해당 URL 받아서 처리하기 2019.01.09 1405
39 로그인 & AJAX 비동기 방식으로 처리&암호화&정규표현식 2019.01.09 1249
38 jsp 웹 멀티업로드 프로그램 file 2019.01.08 1235
37 수정 삭제 2019.01.09 1075
36 태그문자&공백문자&줄바꿈 문자 처리 file 2019.01.09 1027
35 한줄메모 삽입 & AJAX file 2019.01.09 975
34 각종 체크 &우편번호 2019.01.09 958
33 한줄메모 목록 리스트 AJAX file 2019.01.09 928
32 회원가입 2019.01.09 918
31 DBCP 커넥션 풀 file 2019.01.09 905
30 아이디 체크 2019.01.09 895
29 페이지 화면 이동방식 file 2019.01.09 893
28 Get 방식과 Post 방식 2019.01.16 877
27 JSP - DBCP 커넥션 풀 file 2021.03.27 833
26 filter 필터 &한글처리 file 2019.01.09 829
Board Pagination Prev 1 2 3 4 Next
/ 4

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved