위로
아래
데이터베이스에 데이터 갱신
데이터베이스에 접근하는 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");
%>