메뉴 건너뛰기

조회 수 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
번호 제목 날짜 조회 수
65 회원가입 2019.01.09 918
64 한줄메모 삽입 & AJAX file 2019.01.09 975
63 한줄메모 목록 리스트 AJAX file 2019.01.09 928
62 페이지 화면 이동방식 file 2019.01.09 893
61 패키지 컴파일 방법 2021.03.25 147
60 패키지 생성 bat문 2021.03.25 117
59 파라미터를 배열 형식으로 받기 2021.03.25 1428
58 태그문자&공백문자&줄바꿈 문자 처리 file 2019.01.09 1027
57 지시자(Directive) file 2017.09.12 3123
56 주석(comments) file 2017.09.12 3114
55 아이디 체크 2019.01.09 895
54 스크립틀릿(Scriptlet), 선언(declaration), 표현식(expression) file 2017.09.12 3637
53 수정 삭제 2019.01.09 1075
52 메모 상세 & EL file 2019.01.09 824
51 로그인 & AJAX 비동기 방식으로 처리&암호화&정규표현식 2019.01.09 1249
50 각종 체크 &우편번호 2019.01.09 958
49 request, response file 2017.09.12 3220
48 Oracle Database DB연결, table 생성 file 2017.09.11 4262
47 MYSQL JSP 연동 &리스트 뽑아오기 2019.01.09 4436
46 MYSQL JSP insert 폼에서 servlet으로 값넘기기 2019.01.09 26165
Board Pagination Prev 1 2 3 4 Next
/ 4

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved