위로 아래

글 삭제 매커니즘

글 삭제는 해당 게시글의 bno만 알고 있으면,

데이터베이스에 접근해서 해당 bno의 행을 제거하면 된다.

 

 

 

주소 추가

Controller에 delete 주소를 추가해준다.

switch(command) {
		...
    case "delete" : {
        page = "action/BoardDeleteAction.jsp";
        break;
    }
		...
}

 

 

 

데이터베이스 행 삭제 메소드 생성

데이터베이스에 접근하는 DAO에 해당 bno의 행을 삭제하는 메소드를 작성한다.

bno 값만 알면 DELETE 문으로 지우면 되므로, 반환 값은 int 또는 없고, 인자는 bno다.

기본형은 다음과 같다.

public int deleteArticle (int bno) {
    Connection conn = null;
    PreparedStatement pstmt = null;
    int r = 0;

    try {
        conn = DBConnectionManager.getInstance().getConnection();
        String sql = "";
        pstmt = conn.prepareStatement(sql);

    ...

        r = pstmt.executeUpdate();

    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        try {
            if(conn!=null) conn.close();
            if(pstmt!=null) pstmt.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    return r;
}

 

필요한 쿼리문은 다음과 같다.

String sql = "DELETE FROM board WHERE bno = ?";

 

 

?에 인자로 받은 bno를 넣어주면 다음과 같다.

pstmt.setInt(1, bno);

 

메소드를 완성했다.

public int deleteArticle (int bno) {
    Connection conn = null;
    PreparedStatement pstmt = null;
    int r = 0;

    try {
        conn = DBConnectionManager.getInstance().getConnection();
        String sql = "DELETE FROM board WHERE bno = ?";
        pstmt = conn.prepareStatement(sql);
        pstmt.setInt(1, bno);
        r = pstmt.executeUpdate();

    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        try {
            if(conn!=null) conn.close();
            if(pstmt!=null) pstmt.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    return r;
}

 

 

 

글 삭제 비즈니스 로직

글 보기 페이지에서 bno 파라미터를 가져온 후, DAO를 통해 행 삭제 메소드를 실행한다.

처리가 끝난 후 글목록 페이지로 이동한다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import = "java.sql.*" %>
<%@ page import = "bean.BoardDTO" %>
<%@ page import = "bean.BoardDAO" %>

<%
BoardDTO dto = new BoardDTO();
dto.setBno(Integer.parseInt(request.getParameter("bno")));

int bno = dto.getBno();

BoardDAO dao = BoardDAO.getInstance();

dao.deleteArticle(bno);

response.sendRedirect("jb?command=list");
%>

 

 

 


전체 코드

더보기
<!-- BoardDAO -->
package bean;

import java.sql.*;
import java.util.*;

public class BoardDAO {
	private static BoardDAO dao = null;
	
	private BoardDAO() {}
	
	public static BoardDAO getInstance() {
		if(dao==null)
			dao = new BoardDAO();
		return dao;
	}
	
	public int deleteArticle (int bno) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		int r = 0;
		
		try {
			conn = DBConnectionManager.getInstance().getConnection();
			String sql = "DELETE FROM board WHERE bno = ?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, bno);
			r = pstmt.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if(conn!=null) conn.close();
				if(pstmt!=null) pstmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
		return r;
	}
}
<!-- BoardDeleteAction.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import = "java.sql.*" %>
<%@ page import = "bean.BoardDTO" %>
<%@ page import = "bean.BoardDAO" %>

<%
BoardDTO dto = new BoardDTO();
dto.setBno(Integer.parseInt(request.getParameter("bno")));

int bno = dto.getBno();

BoardDAO dao = BoardDAO.getInstance();

dao.deleteArticle(bno);

response.sendRedirect("jb?command=list");
%>