본문 바로가기
Backend

08월 27일 화 | JSP 05 - JSP CRUD 게시판 삭제, 수정

by 구라미 2019. 8. 27.

성적테이블 CRUD

어제에 이어서 간단한 CRUD 게시판 만들기를 이어서 한다.

디렉토리 구조는 아래와 같다.

 

 

 

 

데이터 삭제하기

생성했던 데이터(행)을 삭제하는 jsp

 

1) 수정/삭제 링크만들기

우선 목록페이지와 상세페이지에 수정/삭제 링크를 추가하였다.

 

 

그다음

<a href="sungjukUpdate.jsp?sno=<%=rs.getInt("sno")%>" class="modify">[수정]</a>
<a href="sungjukDel.jsp?sno=<%=rs.getInt("sno")%>" class="delete">[삭제]</a>

수정과 삭제링크에 기본키가 되는 sno의 번호값을 받아와서 생성되는 jsp 링크를 연결해준다.

 

 

 

2) 삭제기능 만들기

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ include file="common.jsp" %>

<!DOCTYPE html">
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="../css/style.css">
<title>성적삭제</title>
</head>
<body>

<%
int sno = Integer.parseInt(request.getParameter("sno"));

try{
	
	Class.forName("oracle.jdbc.OracleDriver");
	Connection con = DriverManager.getConnection
	("jdbc:oracle:thin:@//localhost:1521/xe","java0514","1234");
		
	StringBuilder sql = new StringBuilder();
	sql.append(" DELETE FROM sungjuk ");
	sql.append(" WHERE sno=? ");
	
	PreparedStatement pstmt = null;
	pstmt = con.prepareStatement(sql.toString());
	pstmt.setInt(1, sno);
	
	int cnt = pstmt.executeUpdate();
	if(cnt==0){
		out.println("<p>성적 삭제 실패!</p>");
		out.println("<p><a href='javascript:history.back()'>돌아가기</a></p>");
	} else{
		out.println("<script>");
		out.println(" alert('성적이 삭제되었습니다.'); ");
		out.println(" location.href='sungjukList.jsp'; ");
		out.println("</script>");
	}
	
	
}catch(Exception e){
	out.println("실패" +e);
}

%>

</body>
</html>

 

 

 

데이터 수정하기

생성했던 데이터를 수정하기

데이터 수정하기는 데이터조회 + 데이터수정 + 수정된 데이터전송 으로 이루어진다.

이 두가지 파일로 해결할 것이다.

 

1) sungjukUpdate.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ include file="common.jsp" %>

<!DOCTYPE html">
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="../css/style.css">
<title>성적 수정</title>
</head>
<body>
	<h1>성적 수정하기</h1>
	<p>
	 <a href="sungjukForm.jsp">[성적쓰기]</a>
	 <a href="sungjukList.jsp">[성적목록]</a>
	</p>
	
	<%
	int sno = Integer.parseInt(request.getParameter("sno"));
		
	try {
		
		//고정적인 내용이므로 dbopen이라는 클래스를 만들어서 사용한다.
		Class.forName("oracle.jdbc.OracleDriver");
		Connection con = DriverManager.getConnection
		("jdbc:oracle:thin:@//localhost:1521/xe","java0514","1234");
		
		
		StringBuilder sql = new StringBuilder();
		sql.append(" SELECT sno,uname,kor,eng,mat,addr ");
		sql.append(" FROM sungjuk ");
		sql.append(" WHERE sno=? ");
		
		PreparedStatement pstmt = null;
		pstmt = con.prepareStatement(sql.toString());				
		// ?순서와 ?에 들어갈 자료형 주의
		pstmt.setInt(1, sno);
		
		
		ResultSet rs = null; //					
		rs=pstmt.executeQuery(); //SELECT문에서 사용한다. SELECT한 테이블이 담김.
		//cursor는 불러온 값 가장 처음것을 가리킴
		//cursor : 가리키는 값
		if(rs.next()){ //cursor가 존재하는지?
			%>
				<form method="post" action="sungjukUpdateProc.jsp">
				<table>
				<tr>
					<th>번호</th>
					<td>
					  <input type="hidden" name="sno" value=<%=rs.getInt("sno")%>>					  
					</td>
				</tr>
				<tr>
					<th>이름</th>
					<td>
					  <input type="text" name="uname" maxlength="20" value=<%=rs.getString("uname")%> required autofocus>
					</td>
				</tr>
				
				<tr>
					<th>국어</th>
					<td>
					  <input type="number" name="kor" size="5" value=<%=rs.getInt("kor")%> min="0" max="100" placeholder="점수를 입력하세요">
					</td>
				</tr>
				
				<tr>
					<th>영어</th>
					<td>
					  <input type="number" name="eng" size="5" value=<%=rs.getInt("eng")%> min="0" max="100" placeholder="점수를 입력하세요">
					</td>
				</tr>
				
				
				<tr>
					<th>수학</th>
					<td>
					  <input type="number" name="mat" size="5" value=<%=rs.getInt("mat")%> min="0" max="100" placeholder="점수를 입력하세요">
					</td>
				</tr>
				
				<tr>
					<th>주소</th>
					<td>
					
					<% 
						String addr = rs.getString("addr");						
					%>
					
					  <select name="addr">
					  	<option value="Seoul" <%if(addr.equals("Seoul")){out.print("selected");} %>>서울</option>
					  	<option value="Jeju" <%if(addr.equals("Jeju")){out.print("selected");} %>>제주</option>
					  	<option value="Busan" <%if(addr.equals("Busan")){out.print("selected");} %>>부산</option>
					  	<option value="Suwon" <%if(addr.equals("Suwon")){out.print("selected");} %>>수원</option>
					  </select>
					</td>
				</tr>
				
				<tr>
					<td colspan="2" align="center" class="bottom">
					<input type="submit" value="수정" class="submit">
					<input type="reset" value="취소" class="reset">
				</tr>
				
				</table>
				
				</form>	
						
			<%
			
		}else{
			out.println("<tr>");
			out.println("<td>자료없음</td>");
			out.println("</tr>");
		}
		
		
	} catch (Exception e) {
		
	}
	
	
	%>



</body>
</html>

우선 데이터 내용을 select으로 조회하고

 

 

2) sungjukUpdateProc.jsp

조회한 것을 수정한다.

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ include file="common.jsp" %>
<!DOCTYPE html">
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="../css/style.css">
<title>Insert title here</title>
</head>
<body>
<h1>성적 입력 폼</h1>
	<p><a href="sungjukList.jsp">[성적목록]</a></p>


<%
	//한글 인코딩
	request.setCharacterEncoding("UTF-8");
		
	//입력정보 가져와서 변수에 담기	
	int sno = Integer.parseInt(request.getParameter("sno"));
	String uname = request.getParameter("uname").trim();
	int kor = Integer.parseInt(request.getParameter("kor"));
	int eng = Integer.parseInt(request.getParameter("eng"));
	int mat = Integer.parseInt(request.getParameter("mat"));
	String addr = request.getParameter("addr").trim();
		
	//평균구하기
	int aver=(kor+eng+mat)/3;
	
	//출력
	out.println("번호:" + sno + "<br>");
	out.println("이름:" + uname + "<br>");
	out.println("국어:" + kor + "<br>");
	out.println("영어:" + eng + "<br>");
	out.println("수학:" + mat + "<br>");
	out.println("평균:" + aver + "<br>");
	out.println("주소:" + addr + "<br>");
	out.println("요청IP:" + request.getRemoteAddr() + "<br>");
	
	
	
	try{
		//int sno = Integer.parseInt(request.getParameter("sno"));
		//Oracle DB 저장
		Class.forName("oracle.jdbc.OracleDriver");
		Connection con = DriverManager.getConnection
		("jdbc:oracle:thin:@//localhost:1521/xe","java0514","1234");
			
		StringBuilder sql = new StringBuilder();
		sql.append(" UPDATE SUNGJUK ");
		sql.append(" SET UNAME=?, KOR=?, ENG=?, MAT=?, AVER=?, ADDR=? ");
		sql.append(" WHERE SNO = ? ");
		
		// 4) SQL문 변환
		PreparedStatement pstmt = null;
		pstmt = con.prepareStatement(sql.toString());				
		// ?순서와 ?에 들어갈 자료형 주의	
		pstmt.setString(1, uname);
		pstmt.setInt(2, kor);
		pstmt.setInt(3, eng);
		pstmt.setInt(4, mat);
		pstmt.setInt(5, aver);
		pstmt.setString(6, addr);				
		pstmt.setInt(7, sno);				
		
		//실행
		
		int count = pstmt.executeUpdate();
		if(count == 0){
			out.println("<p>성적수정이 실패했습니다.</p>");
			out.println("<p><a href='javascript:history.back()'>다시시도</a></p>");
		}else {
			out.println("<script>");
			out.println("alert('성적수정이 성공하였습니다.');");
			out.println("location.href='sungjukList.jsp';");
			out.println("</script>");
		}		
		
	} catch (Exception e){
		out.print("실패!"+e);
	}

	
	
%>
	<button onclick="javascript:history.back()" >뒤로가기</button>
</body>
</html>

 

거의 맞게 코딩했는데 계속 이부분 때문에

int sno = Integer.parseInt(request.getParameter("sno"));

java.lang.NumberFormatException: null

이 떠서 왜 그런가 했더니, 데이터를 조회할 때 

<input type="hidden" name="sno" value=<%=rs.getInt("sno")%>>

이 부분이 빠져서 sno의 정보를 가져올 수 없었기 때문이었다.

 

 

 

 

 

이렇게 오진우라는 이름이 오상진으로 수정되었다.

 

댓글