[정보처리산업기사 과정평가형 - 실기] 회원 정보 수정하기
- 정보처리산업기사 과정평가형/실기
- 2021. 4. 10.
회원정보 수정하기
시작은 update.jsp를 변경하면서 시작됩니다.
기존 회원가입이 아니라 업데이트를 진행하기 위해서 action부분만 변경하시면 끝납니다.
변경하시게 되었다면 DAO부분에서 회원등록에 사용한 메소드를 복사진행합니다.
당연히 메소드의 명칭은 변경하는 센스를 갖도록 합니다.
기존 회원가입에서 이 3개의 구간만 수정을 하면 끝납니다.
return은 이 전에 만든 joinSelectOne.me 로 연결합니다.
기존값은 회원가입을 위한 작업이니, 수정만의 작업으로 변경해주셔야 합니다.
Controller
딱 2줄만 추가하여, 수정하기는 끝났습니다.
코드 알아보기
MemberDAO
package MemberDB;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import MemberBean.Member;
public class MemberDAO {
Connection con;
PreparedStatement pstmt;
ResultSet rs;
MemberDAO() throws Exception {
con = getConnection();
}
public static Connection getConnection() throws Exception {
Class.forName("oracle.jdbc.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@//localhost:1521/xe", "hr", "hr");
return con;
}
// 회원가입하기
// request와 response는 암기하지 말고, servlet으로 생성될때 매개변수를 복사해서 가져오면 된다.
public String JoinAction(HttpServletRequest request, HttpServletResponse response) {
// db sql문
// preparedStatement는 ?의 순서에 따라 값이 등록된다.
String sql = "insert into member_tbl_02 values(member_seq.nextval, ?, ?, ?, ?, ?, ?)";
try {
pstmt = con.prepareStatement(sql);
// submit을 눌렀을 때 form안의 name이 Parameter값으로 변환된다.
String name = request.getParameter("name");
String tel = request.getParameter("tel");
String address = request.getParameter("address");
String joindate = request.getParameter("joindate");
String grade = request.getParameter("grade");
String city = request.getParameter("city");
// 이를 sql에 접목 시킨다.
// 1번째 ?에 name의 값을 넣는다.
pstmt.setString(1, name);
// 2번째 ?에 tel의 값을 넣는다.
pstmt.setString(2, tel);
// 3번째 ?에 address의 값을 넣는다.
pstmt.setString(3, address);
// 4번째 ?에 joindate의 값을 넣는다.
pstmt.setString(4, joindate);
// 5번째 ?에 grade의 값을 넣는다.
pstmt.setString(5, grade);
// 6번째 ?에 city의 값을 넣는다.
pstmt.setString(6, city);
// 완료가 되었으면 값을 지정한다.
int cnt = pstmt.executeUpdate();
// 결과값이 0일 경우 실패, 1일 경우 성공이다
System.out.println(cnt);
} catch (Exception e) {
e.printStackTrace();
}
// 완료가 되었으면 닫아 준다.
finally {
try {
if (pstmt != null)
pstmt.close();
if (con != null)
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return "joinNum.me";
}
// 회원번호 자동 생성하기
public String JoinNum(HttpServletRequest request, HttpServletResponse response) {
// 조건 첫번째 줄만 표시
// CUSTNO(회원번호)를 높은순으로 표시하여 가장 마지막 번호를 제일 위로 보낸다.
String sql = "select CUSTNO from member_tbl_02 WHERE ROWNUM =1 ORDER BY CUSTNO DESC";
try {
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
int cnt = 100001;
if (rs.next())
// 첫 번째 컬럼의 값을 가져온다.
cnt = rs.getInt(1);
// custno 컬럼의 값을 가져온다.
// int cnt = rs.getInt("custno");
// 결과값을 request에 담는다.
// cnt의 결과값에서 +1을 진행한다.
request.setAttribute("cnt", ++cnt);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (con != null)
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return "template.jsp";
}
// 회원 목록 불러오기
public String joinSelectAll(HttpServletRequest request, HttpServletResponse response) {
try {
// *을 활용하여 모두 출력할 수 있지만, 컬럼을 확실하게 구분하기 위해 컬럼을 표시하였다.
// 회원번호기준으로 내림차순으로 주어져있으므로 내림차순을 주었다.
String sql = "select CUSTNO, CUSTNAME, PHONE, ADDRESS, JOINDATE, GRADE, CITY from member_tbl_02 ORDER BY CUSTNO ASC";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
// 결과값을 담기 위해 ArrayList를 준비한다.
List<Member> list = new ArrayList<Member>();
// 검색된 개수만큼 반복문이 돌아간다.
while (rs.next()) {
// Member객체 하나를 생성한다.
Member member = new Member();
int custno = rs.getInt(1);
System.out.println(custno);
String name = rs.getString(2);
String phone = rs.getString(3);
String address = rs.getString(4);
// date타입을 불러올 경우, 년월일시분초 로 가져온다. 여기서 년월일은 총 yyyy-mm-dd 이므로 10자리까지만 가져오면 된다.
String date = rs.getString(5).substring(0, 10);
String grade = rs.getString(6);
// 등급에 따라 표시를 변경한다
// A = VIP, B = 일반, C = 직원
if (grade.equals("A"))
grade = "VIP";
else if (grade.equals("B"))
grade = "일반";
else if (grade.equals("C"))
grade = "직원";
String city = rs.getString(7);
// 위에 가져온 것을 Member타입으로 모두 넣는다.
// Member의 객체 num은 String 타입이고, custno는 int타입이다. 따라서 int에서 string으로 형변환이 필요하다.
member.setNum(Integer.toString(custno));
member.setName(name);
member.setTel(phone);
member.setAddress(address);
member.setJoinDate(date);
member.setGrade(grade);
member.setCity(city);
// member를 list에 담는다.
list.add(member);
}
// list의 결과값을 list에 담는다.
request.setAttribute("list", list);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (con != null)
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return "template.jsp";
}
// 회원 정보 가져오기
public String joinSelectOne(HttpServletRequest request, HttpServletResponse response) {
try {
// *을 활용하여 모두 출력할 수 있지만, 컬럼을 확실하게 구분하기 위해 컬럼을 표시하였다.
String sql = "select CUSTNO, CUSTNAME, PHONE, ADDRESS, JOINDATE, GRADE, CITY from member_tbl_02 where custno = ?";
pstmt = con.prepareStatement(sql);
String num = request.getParameter("num");
// 조회를 하기 위해서 ResultSet 하기 전에 가져온다.
pstmt.setInt(1, Integer.parseInt(num));
rs = pstmt.executeQuery();
Member member = new Member();
// 검색된 개수만큼 반복문이 돌아간다.
if (rs.next()) {
// Member객체 하나를 생성한다.
int custno = rs.getInt(1);
System.out.println(custno);
String name = rs.getString(2);
String phone = rs.getString(3);
String address = rs.getString(4);
// date타입을 불러올 경우, 년월일시분초 로 가져온다. 여기서 년월일은 총 yyyy-mm-dd 이므로 10자리까지만 가져오면 된다.
String date = rs.getString(5).substring(0, 10);
String grade = rs.getString(6);
String city = rs.getString(7);
// 위에 가져온 것을 Member타입으로 모두 넣는다.
// Member의 객체 num은 String 타입이고, custno는 int타입이다. 따라서 int에서 string으로 형변환이 필요하다.
member.setNum(Integer.toString(custno));
member.setName(name);
member.setTel(phone);
member.setAddress(address);
member.setJoinDate(date);
member.setGrade(grade);
member.setCity(city);
}
// list의 결과값을 list에 담는다.
request.setAttribute("member", member);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (con != null)
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return "template.jsp";
}
// 회원 수정하기
// request와 response는 암기하지 말고, servlet으로 생성될때 매개변수를 복사해서 가져오면 된다.
public String UpdateAction(HttpServletRequest request, HttpServletResponse response) {
// db sql문
// preparedStatement는 ?의 순서에 따라 값이 등록된다.
String sql = "UPDATE MEMBER_TBL_02 SET CUSTNAME= ?, PHONE=?, ADDRESS=?, JOINDATE=?, GRADE=?, CITY=? WHERE CUSTNO = ?";
try {
pstmt = con.prepareStatement(sql);
// submit을 눌렀을 때 form안의 name이 Parameter값으로 변환된다.
String num = request.getParameter("num");
String name = request.getParameter("name");
String tel = request.getParameter("tel");
String address = request.getParameter("address");
String joindate = request.getParameter("joindate");
String grade = request.getParameter("grade");
String city = request.getParameter("city");
// 이를 sql에 접목 시킨다.
// 1번째 ?에 name의 값을 넣는다.
pstmt.setString(1, name);
// 2번째 ?에 tel의 값을 넣는다.
pstmt.setString(2, tel);
// 3번째 ?에 address의 값을 넣는다.
pstmt.setString(3, address);
// 4번째 ?에 joindate의 값을 넣는다.
pstmt.setString(4, joindate);
// 5번째 ?에 grade의 값을 넣는다.
pstmt.setString(5, grade);
// 6번째 ?에 city의 값을 넣는다.
pstmt.setString(6, city);
//7번째를 추가한다.
pstmt.setInt(7, Integer.parseInt(num));
// 완료가 되었으면 값을 지정한다.
int cnt = pstmt.executeUpdate();
// 결과값이 0일 경우 실패, 1일 경우 성공이다
System.out.println(cnt);
} catch (Exception e) {
e.printStackTrace();
}
// 완료가 되었으면 닫아 준다.
finally {
try {
if (pstmt != null)
pstmt.close();
if (con != null)
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return "joinSelectOne.me";
}
}
MemberController
package MemberDB;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MemberController extends HttpServlet {
protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws Exception {
//URL 확인하기
String uri = request.getRequestURI();
String context = request.getContextPath();
String command = uri.substring(context.length());
String sit = null;
System.out.println("command : "+command);
MemberDAO member = new MemberDAO();
//회원가입 버튼 클릭
if(command.equals("/joinAction.me"))
{
//member의 JoinAction 메소드 실행시키기.
sit = member.JoinAction(request, response);
}
//회원가입 화면 시작할 때.
else if(command.equals("/joinNum.me"))
{
sit = member.JoinNum(request, response);
request.setAttribute("pp", "join");
}
//회원 목록 불러오기
else if(command.equals("/joinSelectAll.me"))
{
sit = member.joinSelectAll(request, response);
request.setAttribute("pp", "joinList");
}
//회원정보 불러오기
else if(command.equals("/joinSelectOne.me"))
{
sit = member.joinSelectOne(request, response);
request.setAttribute("pp", "update");
}
//회원 업데이트를 진행한다
else if(command.equals("/UpdateAction.me"))
{
sit = member.UpdateAction(request, response);
}
//결과 수행
RequestDispatcher dispatcher = request.getRequestDispatcher(sit);
dispatcher.forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
try {
doProcess(request, response);
}catch(Exception e)
{
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
try
{
doProcess(request, response);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
update.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="MemberBean.Member" %>
<%
request.setCharacterEncoding("UTF-8");
Member member = (Member) request.getAttribute("member");
%>
<!DOCTYPE html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<head>
<title>Hi</title>
<script language="javascript">
//유효성 검사 하기
function joinChk()
{
//회원 성명
if(document.join.name.value =="")
{
alert('회원성명을 입력해주세요.');
document.join.name.focus();
return false;
}
//회원 전화
if(document.join.tel.value =="")
{
alert('회원전화를 입력해주세요.');
document.join.tel.focus();
return false;
}
//회원 주소
if(document.join.address.value =="")
{
alert('회원주소를 입력해주세요.');
document.join.address.focus();
return false;
}
//가입 일자
if(document.join.joindate.value =="")
{
alert('가입일자를 입력해주세요.');
document.join.joindate.focus();
return false;
}
//고객등급
if(document.join.grade.value =="")
{
alert('고객등급을 입력해주세요.');
document.join.grade.focus();
return false;
}
//도시코드
if(document.join.city.value =="")
{
alert('도시번호를 입력해주세요.');
document.join.city.focus();
return false;
}
alert('회원등록이 완료되었습니다.!');
document.join.submit();
}
</script>
</head>
<body>
<center>
<h1>홈쇼핑 회원 등록</h1>
<form name="join" action="UpdateAction.me" method="post">
<table border="1">
<tr>
<td>회원번호(자동발생)</td>
<td><input type="text" name="num" value="<%=member.getNum()%>"></td>
</tr>
<tr>
<td>회원성명</td>
<td><input type="text" name="name" value="<%=member.getName()%>"></td>
</tr>
<tr>
<td>회원전화</td>
<td><input type="text" name="tel" value="<%=member.getTel()%>"></td>
</tr>
<tr>
<td>회원주소</td>
<td><input type="text" name="address" value="<%=member.getAddress()%>"></td>
</tr>
<tr>
<td>가입일자</td>
<td><input type="text" name="joindate" value="<%=member.getJoinDate()%>"></td>
</tr>
<tr>
<td>고객등급</td>
<td><input type="text" name="grade" value="<%=member.getGrade()%>"></td>
</tr>
<tr>
<td>도시코드</td>
<td><input type="text" name="city" value="<%=member.getCity()%>"></td>
</tr>
<tr>
<td colspan="2"><center><input type="button" value="등록" onclick="joinChk()"> <input
type="submit" formaction="joinSelectAll.me" value="조회"></center></td>
</tr>
</table>
</form>
</center>
</body>
</html>
아시겠지만, 이미 반복된 작업의 연속이여서 복사, 붙여놓기만으로 작업이 쉽게 끝나게 됩니다.
기존 회원등록에 사용한 시간에 비해 절반의 시간으로도 수정하기가 완료되었다면 매우 굳 입니다.
전체 목록
[정보처리산업기사 과정평가형 - 실기] 회원가입 만들기
[정보처리산업기사 과정평가형 - 실기] 회원가입 만들기2
[정보처리산업기사 과정평가형 - 실기] 회원가입 만들기3
[정보처리산업기사 과정평가형 - 실기] 회원 목록 만들기
[정보처리산업기사 과정평가형 - 실기] 회원 정보 가져오기
[정보처리산업기사 과정평가형 - 실기] 회원 정보 수정하기
반응형
'정보처리산업기사 과정평가형 > 실기' 카테고리의 다른 글
[정보처리산업기사 과정평가형 - 실기] 코드 가져가기 (0) | 2021.04.10 |
---|---|
[정보처리산업기사 과정평가형 - 실기] 매출 표현하기 (0) | 2021.04.10 |
[정보처리산업기사 과정평가형 - 실기] 회원 정보 가져오기 (0) | 2021.04.10 |
[정보처리산업기사 과정평가형 - 실기] 회원 목록 만들기 (0) | 2021.04.10 |
[정보처리산업기사 과정평가형 - 실기] 회원가입 만들기3 (0) | 2021.04.10 |