본문 바로가기
기초 및 언어/▶ Java&JSP

22. JSP + JDBC update 예제 정리3 _ Movie

by 류딩이 2025. 9. 15.

구현하기구현하기

🔎 전체 흐름도

[select.jsp] 수정 버튼 클릭 (num 전달)
        │
        ▼
[updateForm.jsp] num 기반으로 기존 값 불러오기
        │
        ▼
사용자가 수정 후 "수정하기" 클릭
        │
        ▼
[updateProc.jsp] 수정 데이터 MovieBean에 담아 DAO 전달
        │
        ▼
[MovieDao.updateMovie()] DB update 실행
        │
        ▼
성공 → select.jsp 리다이렉트
실패 → updateForm.jsp 재호출

1️⃣ updateForm.jsp (수정 화면)

<%@page import="myPkg.MovieBean"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

select.jsp(num)=>updateForm.jsp<br>
<jsp:useBean id="mdao" class="myPkg.MovieDao" />
<% 
	String[] genre = {"공포", "다큐", "액션", "애니메이션"};
	String[] time = {"08~10","10~12","12~14","14~16","16~18","18~20"};
	int num = Integer.parseInt(request.getParameter("num"));
	MovieBean movie = mdao.getMovieByNum(num);  
	System.out.println(movie.getNum());
	System.out.println(movie.getGenre()); // 공포 액션 
%>

	<h2>영화 선호도 조사 수정폼</h2>
	<form action="updateProc.jsp" method="post">
		<input type="hidden" name="num" value="<%=num%>">
		<table border="1">
		<tr>
			<td>아이디</td>
			<td><input type="text" name="id" value="<%=movie.getId()%>"></td>  
		</tr>
		<tr>
			<td>이름</td><td> 
			<input type="text" name="name" value="<%=movie.getName()%>"></td> 
		</tr> 
		<tr>
			<td>나이</td>
			<td><input type="text" name="age" value="<%=movie.getAge()%>"></td> 
		</tr>
		<tr>
			<td>좋아하는 장르</td>
			<td>
				<!-- 
				<input type="checkbox" name="genre" value="공포">공포
				<input type="checkbox" name="genre" value="다큐">다큐 
				<input type="checkbox" name="genre" value="액션">액션 
				<input type="checkbox" name="genre" value="애니메이션">애니메이션 
				-->
				
                <%for(String g : genre) { %>
                    <input type="checkbox" name="genre" value="<%= g %>" <%if(movie.getGenre().contains(g)){ %> checked <%}%> ><%= g %>         
                <%} %>
	
			</td> 
		</tr>

		<tr>
			<td>즐겨보는 시간대</td>
			<td>
		
				<select name="time">
					<!-- <option value="08~10">08~10</option>
					<option value="10~12">10~12</option>
					<option value="12~14">12~14</option>
					<option value="14~16">14~16</option>
					<option value="16~18">16~18</option>
					<option value="18~20">18~20</option> -->
					
					<%for(int i = 0; i < time.length; i++){ %>
					    <option value="<%=time[i] %>" <%if(movie.getTime().equals(time[i])){%> selected <%} %>><%=time[i] %></option>
					<%} %>
				</select>
		<tr>
			<td>동반 관객수</td>
			<td>
				<%
				for(int i=1;i<=5;i++){
				%>
					<input type="radio" name="partner" value="<%=i%>" <%if(movie.getPartner()==i){ %> checked <%}%>><%=i%>
				<%} %>
			</td>
		</tr>
		
		<tr>
			<td>영화관 개선사항</td>
			<td>
				<textarea name="memo" cols="40" rows="3"><%=movie.getMemo() %></textarea> 
			</td>
		</tr>
		<tr align="center">
			<td colspan="2">
				<input type="submit" value="수정하기">
			</td>
		</tr>
		</table>
	</form>

 

 

<jsp:useBean id="mdao" class="myPkg.MovieDao" />

int num = Integer.parseInt(request.getParameter("num"));
MovieBean movie = mdao.getMovieByNum(num);

 

✔️ Dao 호출 하여 getMovieByNum(num) 으로 DB 값 불러와서

폼에 기본값으로 표시 (체크박스, 라디오, select 포함)

 

 

  • URL: updateForm.jsp?num=10
  • getParameter("num") → "10" (문자열)
  • 정수로 쓰려면 Integer.parseInt("10") 해야 int로 변환됨

 


2️⃣ updateProc.jsp (수정 처리)

<%
    request.setCharacterEncoding("UTF-8");
%>
<jsp:useBean id="mdao" class="myPkg.MovieDao"/>
<jsp:useBean id="mBean" class="myPkg.MovieBean"/>
<jsp:setProperty property="*" name="mBean"/>

<%
    // 체크박스 다중 값 처리
    String[] genre = request.getParameterValues("genre");
    String temp = "";
    if(genre != null){
        for(int i=0; i<genre.length; i++){
            temp += genre[i] + " ";
        }
    }
    mBean.setGenre(temp);

    int cnt = mdao.updateMovie(mBean); 
    if(cnt > 0){
        response.sendRedirect("select.jsp");
    }else{
        response.sendRedirect("updateForm.jsp?num="+mBean.getNum());
    }
%>

 

✔️ 폼 데이터를 MovieBean에 자동 매핑 (jsp:setProperty property="*")
✔️ 장르는 여러 개 선택될 수 있어서 수동으로 문자열 합쳐서 저장
✔️ DAO 호출 후 성공/실패에 따라 이동

 


 

3️⃣ MovieDao (DB 처리)

// 특정 번호 데이터 가져오기
public MovieBean getMovieByNum(int num) {
    getConnection();
    MovieBean mb = null;
    try {
        String sql = "select * from movie where num = ?";
        ps = conn.prepareStatement(sql);
        ps.setInt(1, num);
        rs = ps.executeQuery();
        if(rs.next()) {
            mb = new MovieBean(
                rs.getInt("num"),
                rs.getString("id"),
                rs.getString("name"),
                rs.getInt("age"),
                rs.getString("genre"),
                rs.getString("time"),
                rs.getInt("partner"),
                rs.getString("memo")
            );
        }
    } finally { /* 리소스 정리 */ }
    return mb;
}

// 데이터 수정
public int updateMovie(MovieBean mb) {
    getConnection();
    int cnt = -1;
    try {
        String sql = "update movie set id=?, name=?, age=?, genre=?, time=?, partner=?, memo=? where num=?";
        ps = conn.prepareStatement(sql);
        ps.setString(1, mb.getId());
        ps.setString(2, mb.getName());
        ps.setInt(3, mb.getAge());
        ps.setString(4, mb.getGenre());
        ps.setString(5, mb.getTime());
        ps.setInt(6, mb.getPartner());
        ps.setString(7, mb.getMemo());
        ps.setInt(8, mb.getNum());
        cnt = ps.executeUpdate();
    } finally { /* 리소스 정리 */ }
    return cnt;
}

 

✔️ getMovieByNum() → 수정폼에 기존 데이터 표시
✔️ updateMovie() → 변경된 데이터 DB에 반영

 


✅ 정리

  • updateForm.jsp
    • num 받아서 해당 데이터 불러오기
    • 기존 값들을 폼에 표시 (체크박스, 라디오, select 포함)
  • updateProc.jsp
    • 수정된 값들을 MovieBean에 묶어서 DAO로 전달
    • 다중 선택값(장르)은 별도 처리
  • MovieDao
    • getMovieByNum() : 수정폼에 보여줄 데이터 조회
    • updateMovie() : DB에 업데이트 실행

 

  • Form.jsp → 화면만 담당 (Bean 필요 없음)
  • Proc.jsp → 입력값을 Bean에 담아 DAO로 전달 (Bean 필수)
  • Select.jsp → DAO가 반환한 Bean 리스트를 출력 (Bean 직접 생성 ❌, DAO가 만들어줌)

Proc.jsp에서만 Bean을 직접 호출하는 이유는 "사용자가 입력한 값(request 파라미터)"를 Bean에 묶어서 DAO로 보내는 역할이 있기 때문이에요.