성적테이블 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의 정보를 가져올 수 없었기 때문이었다.
이렇게 오진우라는 이름이 오상진으로 수정되었다.
'Backend' 카테고리의 다른 글
08월 29일 목 | JSP 07 - JSP Java beans을 이용한 성적프로그램 (0) | 2019.08.29 |
---|---|
08월 28일 수 | JSP 06 - JSP Java bean (0) | 2019.08.28 |
08월 26일 월 | JSP 04 - JSP CRUD 게시판 생성, 목록, 상세페이지 (1) | 2019.08.26 |
08월 23일 금 | JSP 03 - JSP 내장객체 (0) | 2019.08.23 |
08월 22일 목 | JSP 02 - JSP 문법 (0) | 2019.08.22 |
댓글