위로 아래

데이터베이스에 데이터 갱신

데이터베이스에 접근하는 DAO에, 

데이터베이스 데이터를 수정하는 메소드를 작성해야 한다.

 

새로 작성한 데이터를 가지고 데이터베이스에 넣어야 하니, 인자는 DTO가 되겠다.

쿼리문은 UPDATE 문이 될 것이니, 반환은 int 또는 void이다.

 

메소드의 기본형은 다음과 같다.

public int updateArticle(BoardDTO dto) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		int r = 0;
		
		try {
			conn = DBConnectionManager.getInstance().getConnection();
			String sql = "";
            
                	...
			
			r = pstmt.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if(conn!=null) conn.close();
				if(conn!=pstmt) pstmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
		return r;
	}

 

 

쿼리문은 수정된 데이터인 subject, writer, content, passwd만 수정하면 된다.

그리고 게시글 각자 진행되니 조건으로 bno값을 넣어준다.

쿼리문은 다음과 같다.

String sql = "UPDATE board "
            + "SET subject=?, writer=?, content=?, passwd=?, ip=?, regdate = SYSDATE "
            + "WHERE bno=?";

 

 

쿼리문의 ?를 인자로 받은 DTO의 값으로 채우면 다음과 같다.

pstmt.setString(1, dto.getSubject());
pstmt.setString(2, dto.getWriter());
pstmt.setString(3, dto.getContent());
pstmt.setString(4, dto.getPasswd());
pstmt.setString(5, dto.getIp());
pstmt.setInt(6, dto.getBno());

 

메소드의 결과는 다음과 같다.

public int updateArticle(BoardDTO dto) {
    Connection conn = null;
    PreparedStatement pstmt = null;
    int r = 0;

    try {
        conn = DBConnectionManager.getInstance().getConnection();
        String sql = "UPDATE board "
                + "SET subject=?, writer=?, content=?, passwd=?, ip=?, regdate = SYSDATE "
                + "WHERE bno=?";
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, dto.getSubject());
        pstmt.setString(2, dto.getWriter());
        pstmt.setString(3, dto.getContent());
        pstmt.setString(4, dto.getPasswd());
        pstmt.setString(5, dto.getIp());
        pstmt.setInt(6, dto.getBno());

        r = pstmt.executeUpdate();

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

    return r;
}

 

 

 

글 수정 주소 추가

BoardUpdateProc.jsp를 만들어서 위에서 만든 메소드를 실행해주자.

우선 controller에 command가 updateProc일 때를 추가해주어야 한다.

switch(command) {

	...
    
    case "update" : {
        page = "action/BoardUpdateAction.jsp";
        break;
    }
    case "updateProc" : {
        page = "action/BoardUpdateProc.jsp";
        break;
    }
    
 	   ...
    
}

 

게시글 수정 페이지에서 form 태그의 action 값을 BoardUpdateProc.jsp으로 설정해준다.

<form name="form1" action="jb?command=updateProc" method="post">
		...
</form>

 

 

 

데이터베이스 수정 메소드 실행

BoardUpdateProc.jsp를 만들어서, 

DTO 객체에 수정된 데이터 파라미터들을 받아주고,

DTO를 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")));
dto.setSubject(request.getParameter("subject"));
dto.setWriter(request.getParameter("writer"));
dto.setContent(request.getParameter("content"));
dto.setPasswd(request.getParameter("passwd"));
dto.setIp(request.getRemoteAddr());

// 데이터 베이스 접근 객체 받기
BoardDAO dao = BoardDAO.getInstance();

// 데이터 베이스 수정 메소드 호출
dao.updateArticle(dto);

// 글목록으로 페이지 이동
response.sendRedirect("jb?command=list");
%>

 

 

 


전체 코드

더보기
// BoardDAO.java 
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 updateArticle(BoardDTO dto) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		int r = 0;
		
		try {
			conn = DBConnectionManager.getInstance().getConnection();
			String sql = "UPDATE board "
					+ "SET subject=?, writer=?, content=?, passwd=?, ip=?, regdate = SYSDATE "
					+ "WHERE bno=?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, dto.getSubject());
			pstmt.setString(2, dto.getWriter());
			pstmt.setString(3, dto.getContent());
			pstmt.setString(4, dto.getPasswd());
			pstmt.setString(5, dto.getIp());
			pstmt.setInt(6, dto.getBno());
			
			r = pstmt.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if(conn!=null) conn.close();
				if(conn!=pstmt) pstmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
		return r;
	}
}
<!-- BoardUpdateProc.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")));
dto.setSubject(request.getParameter("subject"));
dto.setWriter(request.getParameter("writer"));
dto.setContent(request.getParameter("content"));
dto.setPasswd(request.getParameter("passwd"));
dto.setIp(request.getRemoteAddr());

// 데이터 베이스 접근 객체 받기
BoardDAO dao = BoardDAO.getInstance();

// 데이터 베이스 수정 메소드 호출
dao.updateArticle(dto);

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