JSP_4강_4_Member테이블_DAO_회원 수정, 삭제

열라뽕따히·2024년 3월 19일

JSP

목록 보기
21/43

JSP_4강_3에 이어서 상세정보 페이지의 회원을 수정하고 삭제하는 코드를 만들어보자



member_content.jsp에 미리 선언해둔

update.go 서블릿을 만들자!

회원 전체의 값을 수정화면에 그대로 출력해줘야 하기 때문에 이전에 만들어둔 contentList 메서드를 호출해야함!


=============================코드=============================

package com.member.controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.member.model.MemberDAO;
import com.member.model.MemberDTO;


@WebServlet("/update.go")
public class UpdateServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
   
    public UpdateServlet() {
        super();
        
    }

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		int member_no = Integer.parseInt(request.getParameter("no"));
		
		MemberDAO dao = MemberDAO.getInstance();
        
	// MemberDAO 클래스에 있는 contentList() 메서드 호출하자!
		MemberDTO update = dao.contentList(member_no);
		
		request.setAttribute("Update", update);
		
		RequestDispatcher rd = request.getRequestDispatcher("view/member_modify.jsp");
		
		rd.forward(request, response);
		
	}



MemberDAO에 있는 contentList 메서드는 아래와 같음


=============================코드=============================

public MemberDTO contentList(int num) {
		
		MemberDTO dto = null;
		
		// 1 ~ 2단계 : 오라클 드라이버 메모리로 로딩 및 DB 연결 작업 진행
		openConn();
		
		try {
			// 3단계 : DB에 전송할 SQL문을 작성
			sql = "select * from member where memno = ?";
			
			// 4단계 : SQL문을 DB 전송객체에 인자로 전달
			pstmt = con.prepareStatement(sql);
			
			// 4-1단계 : 플레이스 홀더(?)에 데이터를 배정
			pstmt.setInt(1, num);
			
			// 5단계 : SQL문을 DB에 전송 및 실행
			rs = pstmt.executeQuery();
			
			if(rs.next()) {
				dto = new MemberDTO();
				
				dto.setNum(rs.getInt("memno"));
				dto.setMemid(rs.getString("memid"));
				dto.setMemname(rs.getString("memname"));
				dto.setPwd(rs.getString("mempwd"));
				dto.setAge(rs.getInt("age"));
				dto.setMileage(rs.getInt("mileage"));
				dto.setJob(rs.getString("job"));
				dto.setAddr(rs.getString("addr"));
				dto.setRegdate(rs.getString("regdate").substring(0,10));
				
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			// 6단계 : DB에 연결되어 있던 자원을 종료하기
			closeConn(rs, pstmt, con);
		}
		return dto;
	}



update.go 서블릿 내의 코드에 작성한

수정 화면 jsp를 만들자

view -> member_modify.jsp 파일 생성


=============================코드=============================

<%@page import="com.member.model.MemberDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	MemberDTO up = (MemberDTO)request.getAttribute("Update");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

   <div align="center">
      <hr width="30%" color="skyblue">
         <h3><%=up.getMemname() %> 회원님의 상세정보</h3>
      <hr width="30%" color="skyblue">
      <br><br>
      
      <form method="post"  action="<%=request.getContextPath() %>/update_ok">
      
      <table border="1" cellspacing="0" width="350">
         <%
            if(up == null){
         %>      
            <tr>
               <td colspan="2" align="center">
                  <h3>조회된 회원의 정보가 없습니다.</h3>
               </td>
            </tr>
         <%   } %>
         
         <tr>
            <th>회원 NO.</th>
            <td>
            	<input type = "text" name = num value = "<%=up.getNum() %>">
            </td>
         </tr>
         
         <tr>
            <th>회원 이름</th>
            <td>
            	<input type = "text" name = name value = "<%=up.getMemname() %>">
            </td>
         </tr>
         
         <tr>
            <th>회원 아이디</th>
            <td>
            	<input type = "text" name = id value = "<%=up.getMemid() %>">
            </td>
         </tr>
         
         <tr>
            <th>회원 비밀번호</th>
            <td>
            	<input type = "text" name = pwd value = "<%=up.getPwd() %>">
            </td>
         </tr>
         
         <tr>
            <th>회원 나이</th>
            <td>
            	<input type = "text" name = age value = "<%=up.getAge() %>">
            </td>
         </tr>
         
         <tr>
            <th>보유 마일리지</th>
            <td>
            	<input type = "text" name = mileage value = "<%=up.getMileage() %>">
            </td>
         </tr>
         
         <tr>
            <th>회원 직업</th>
            <td>
            	<input type = "text" name = job value = "<%=up.getJob() %>">
            </td>
         </tr>
         
         <tr>
            <th>회원 주소</th>
            <td>
            	<input type = "text" name = addr value = "<%=up.getAddr() %>">
            </td>
         </tr>
         
         <tr>
            <th>가입일자</th>
            <td>
            	<input type = "text" name = regdate  readonly value = "<%=up.getRegdate() %>">
            </td>
         </tr>
         
         <tr>
	        <td colspan="2" align="center">
	         	<input type="submit" value="사원수정">&nbsp;&nbsp;&nbsp;
	         	  <input type="reset" value="다시작성">
	         </td>
	      </tr>
              
      </table>
    </form> 
                 
   </div>
</body>
</html>



회원 수정을 클릭했을 때 전체 리스트에 저장이 되어 화면에 보여질

update_ok 서블릿을 만들자!


=============================코드=============================

package com.member.controller;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.member.model.MemberDAO;
import com.member.model.MemberDTO;


@WebServlet("/update_ok")
public class UpdateOkServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
  
    public UpdateOkServlet() {
        super();
        
    }

	
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset = UTF-8");
		
		int mem_num = Integer.parseInt(request.getParameter("num"));
		String mem_name = request.getParameter("name");
		String mem_id = request.getParameter("id");
		String mem_pwd = request.getParameter("pwd");
		int mem_age = Integer.parseInt(request.getParameter("age"));
		int mem_mileage = Integer.parseInt(request.getParameter("mileage"));
		String mem_job = request.getParameter("job");
		String mem_addr = request.getParameter("addr");
		
		MemberDTO dto = new MemberDTO();
		dto.setNum(mem_num);
		dto.setMemname(mem_name);
		dto.setMemid(mem_id);
		dto.setPwd(mem_pwd);
		dto.setAge(mem_age);
		dto.setMileage(mem_mileage);
		dto.setJob(mem_job);
		dto.setAddr(mem_addr);
		
		MemberDAO dao = MemberDAO.getInstance();
		
		int check = dao.updateList(dto);
		
		PrintWriter out = response.getWriter();
		if(check > 0) {
			out.println("<script>");
			out.println("alert('사원 정보 수정 성공!!')");
			out.println("location.href='content.go?num=" + dto.getNum() + "'");
			out.println("</script>");
		}else {
			out.println("<script>");
			out.println("alert('사원 정보 수정 실패...')");
			out.println("history.back()");
			out.println("</script>");
		}
	}

}



이제 main.jsp 에서 실행해보자!


=============================실행=============================

회원 수정 클릭!

사원수정 클릭!

확인 클릭

수정이 된 것을 확인할 수 있다!






이제 회원 삭제가 될 수 있도록 만들어보자

delete.go 서블릿을 만들자


=============================코드=============================

package com.member.controller;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.member.model.MemberDAO;


@WebServlet("/delete.go")
public class DeleteServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    
    public DeleteServlet() {
        super();
    }

	
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// get 방식으로 넘어온 회원번호에 해당하는 회원을 member 테이블에서 삭제하는 비지니스 로직
		response.setContentType("text/html; charset = UTF-8");
		
		int member_no = Integer.parseInt(request.getParameter("num"));
		
	 	MemberDAO dao = MemberDAO.getInstance();
	 	
	 	dao.deleteMember(member_no);



MemberDAO에서

deleteMember() 메서드를 만들자


=============================코드=============================

// 회원번호에 해당하는 회원을 member 테이블에서 삭제하는 메서드
		public int deleteMember(int no) {
			
			int result = 0;
			
			try {
				// 1 ~ 2단계 : 오라클 드라이버 로딩 및 DB 연결 작업 진행
				openConn();
				
				// 3단계 : DB에 전송할 SQL문 작성
				sql = "delete from member where memno = ?";
				
				// 4단계 : SQL문을 DB 전송 객체의 인자로 전달
				pstmt = con.prepareStatement(sql);
				
				// 4-1단계 : 플레이스 홀더(?)에 데이터를 배정
				pstmt.setInt(1, no);
				
				// 5단계 : SQL문을 DB에 전송 및 실행
				result = pstmt.executeUpdate();
				
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				// 6단계 : DB에 연결되어 있는 자원 종료
				closeConn(pstmt, con);
			}
			return result;
		}



다시 서블릿으로 돌아가자


=============================코드=============================

package com.member.controller;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.member.model.MemberDAO;


@WebServlet("/delete.go")
public class DeleteServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    
    public DeleteServlet() {
        super();
    }

	
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// get 방식으로 넘어온 회원번호에 해당하는 회원을 member 테이블에서 삭제하는 비지니스 로직
		response.setContentType("text/html; charset = UTF-8");
		
		int member_no = Integer.parseInt(request.getParameter("num"));
		
	 	MemberDAO dao = MemberDAO.getInstance();
// -------------------여기서부터 작성-------------------
	 	int check = dao.deleteMember(member_no);
	 	
	 	PrintWriter out = response.getWriter();
	 	
	 	if(check > 0) {
        //updateSequence 메서드를 또 만들어줘야 함!
	 		dao.updateSequence(member_no);
	 		out.println("<script>");
	 		out.println("alert('회원 삭제 성공!!')");
	 		out.println("location.href = 'select.go'");
	 		out.println("</script>");
	 	}else {
	 		out.println("<script>");
	 		out.println("alert('회원 삭제 실패..')");
	 		out.println("location.href = 'select.go'");
	 		out.println("</script>");
	 	}
	}

}



값이 사라질 시 사라진 번호의 다음 번호 수가 하나씩 감소할 수 있게(번호 정렬)

updateSequence 메서드를 만들어주자


=============================코드=============================

// 회원 번호 순번 작업 해주는 메서드
		public void updateSequence(int no) {
			
			try {
				// 1 ~ 2단계 : 오라클 드라이버 로딩 및 DB 연결 작업 진행
				openConn();
				
				// 3단계 : DB에 전송할 SQL문 작성
				sql = "update member set memno = memno - 1 where memno > ?";
				
				// 4단계 : SQL문을 DB 전송 객체의 인자로 전달
				pstmt = con.prepareStatement(sql);
				
				// 4-1단계 : 플레이스 홀더(?)에 데이터를 배정
				pstmt.setInt(1, no);
							
				// 5단계 : SQL문을 DB에 전송 및 실행
				pstmt.executeUpdate();
				
			} catch (SQLException e) {
				e.printStackTrace();
				
			} finally {
				closeConn(pstmt, con);
			}
				
		}



main.jsp 에서 실행해보자!


=============================실행=============================

회원 삭제 클릭!

확인 클릭

확인

전체회원 목록 리스트에 값이 삭제가 되고 회원No가 순서대로 나열된 것을 확인할 수 있음

0개의 댓글