메뉴 건너뛰기

조회 수 783 추천 수 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
번호 제목 날짜 조회 수
20 JSP 게시판 만들기 - 완료 (소스파일, 의견) 2017.09.12 358
19 JSP 게시판 만들기 - 구현 (마무리, 테스트) file 2017.09.12 302
18 JSP 게시판 만들기 - 구현 (파라미터, 요청/응답) file 2017.09.12 247
17 JSP 게시판 만들기 - 구현 (Method, Query 기초) file 2017.09.12 228
» JSP 게시판 만들기 - 구현 (MySQL과의 연동) file 2017.09.12 783
15 JSP 게시판 만들기 - 구현 (HTML 코딩) file 2017.09.12 565
14 JSP 게시판 만들기 - 구현 (디렉토리, 파일, 테이블 생성) file 2017.09.12 335
13 JSP 게시판 만들기 - 구현 (웹 프로젝트와 톰켓 연동, 샘플 페이지 작성) file 2017.09.12 188
12 JSP 게시판 만들기 - 네이밍, 데이터베이스 설계 file 2017.09.12 198
11 JSP (Java Server Page), Servlet에 대해 file 2017.09.12 157
10 JSP 게시판 만들기 - 시스템 아키텍처 file 2017.09.12 154
9 JSP 게시판 만들기 - 개발표준, 화면설계 file 2017.09.12 214
8 JSP 게시판 만들기 - 구현 (이클립스 웹 프로젝트 생성) file 2017.09.12 273
7 JSP 게시판 만들기 - 구현 (이클립스 웹 프로젝트 생성) file 2017.09.12 185
6 request, response file 2017.09.11 101
5 주석(comments) file 2017.09.11 89
4 지시자(Directive) file 2017.09.11 100
3 스크립틀릿(Scriptlet), 선언(declaration), 표현식(expression) file 2017.09.11 117
2 JSP 동작 원리, 내부 객체 file 2017.09.11 123
1 Oracle Database DB연결, table 생성 file 2017.09.11 146
Board Pagination Prev 1 Next
/ 1

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved