메뉴 건너뛰기

조회 수 37939 추천 수 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
번호 제목 날짜 조회 수
65 Oracle Database DB연결, table 생성 file 2017.09.11 4338
64 JSP 동작 원리, 내부 객체 file 2017.09.12 3633
63 스크립틀릿(Scriptlet), 선언(declaration), 표현식(expression) file 2017.09.12 3690
62 지시자(Directive) file 2017.09.12 3249
61 주석(comments) file 2017.09.12 3176
60 request, response file 2017.09.12 3536
59 JSP 게시판 만들기 - 구현 (이클립스 웹 프로젝트 생성) file 2017.09.12 5055
58 JSP 게시판 만들기 - 구현 (이클립스 웹 프로젝트 생성) file 2017.09.12 13481
57 JSP 게시판 만들기 - 개발표준, 화면설계 file 2017.09.12 6657
56 JSP 게시판 만들기 - 시스템 아키텍처 file 2017.09.12 4828
55 JSP (Java Server Page), Servlet에 대해 file 2017.09.12 6760
54 JSP 게시판 만들기 - 네이밍, 데이터베이스 설계 file 2017.09.12 5036
53 JSP 게시판 만들기 - 구현 (웹 프로젝트와 톰켓 연동, 샘플 페이지 작성) file 2017.09.12 5232
52 JSP 게시판 만들기 - 구현 (디렉토리, 파일, 테이블 생성) file 2017.09.12 7967
51 JSP 게시판 만들기 - 구현 (HTML 코딩) file 2017.09.12 17134
» JSP 게시판 만들기 - 구현 (MySQL과의 연동) file 2017.09.12 37939
49 JSP 게시판 만들기 - 구현 (Method, Query 기초) file 2017.09.12 30692
48 JSP 게시판 만들기 - 구현 (파라미터, 요청/응답) file 2017.09.12 4849
47 JSP 게시판 만들기 - 구현 (마무리, 테스트) file 2017.09.12 6632
46 JSP 게시판 만들기 - 완료 (소스파일, 의견) 2017.09.12 5560
Board Pagination Prev 1 2 3 4 Next
/ 4

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved