일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- sql developer
- github
- 답변형 게시판
- HTTP Status 500
- Oracle DB
- JavaScript
- git
- alias
- HTTP Status 404
- jQuery
- tomcat
- distinct
- 과정평가형
- rownum
- Oracle SQL
- 성적프로그램
- 이클립스
- Bootstrap
- 제약조건
- 부트스트랩
- 모조칼럼
- 한글 인코딩
- group by
- Java
- JSP
- HTML
- oracle
- SQL
- ||
- CRUD
초급의 끄적거림
[JSP] JAVA빈즈 (DTO, DAO, CRUD) / 성적프로그램 본문
1. DTO (Data Transfer Object) 데이터 전송 객체
⊙ 사용자가 입력한 값을 객체형태로 받을 수 있게 클래스 구성
⊙ 폼에서 입력된 데이터들은 하나의 DTO 객체로 변환 가능
⊙ 하나의 데이터베이스 레코드를 저장하여 레코드와 같은 구조를 가짐
⊙ 레코드가 50개이면 DTO 객체도 50개
⊙ 한 개의 레코드는 빈즈 클래스 객체 하나로 매핑
⊙ 데이터가 포함된 객체를 한 시스템에서 다른 시스템으로 전달하는 작업을 처리하는 객체
2. DAO (Data Access Object)
⊙ insert, delete, update, select 등 레코드 처리를 주 목적으로 한다
⊙ DTO 객체를 데이터베이스 서버에 저장
⊙ 데이터베이스 서버로부터 레코드를 SELECT한 후, DTO 객체로 변경해 가져옴
⊙ SQL을 직접 실행하는 기능을 가짐
⊙ JSP에서 데이터베이스 접속 로직을 Beans로 작성하여 DB정보 변경시 쉽게 변경사항을 구현할 수 있음
⊙ 데이터 접근을 목적으로 하는 개체
⊙ 커넥션 같은 것을 하나만 두고 여러 사용자가 DAO의 인터페이스를 사용하여 필요한 자료에 접근하도록 하는 것
⊙ DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트
3. CRUD
⊙ DAO가 접근하는 것은 DB, File, Application 일 수 있고 이것들을 접근하는 기술 → CRUD
⊙ Create, Read, Update, Delete
Create, Retrieve, Update, Destroy를 묶어서 하는 용어
→ 대부분의 software가 가지는 기본적인 데이터 처리 기능
★ 페이지는 서로 다른 페이지, 연결 된 것처럼 보이지만 자료를 끌어오는 것은 SungjukDAO.java, 보여주는 것은 sungjukList.jsp
4. DBOpen.java / DBClose.java
⊙ 경로 : basicWeb - src - net.utility - DBOpen.java / DBClose.java
//DBOpen.java
package net.utility;
import java.sql.Connection;
public class DBOpen{
public static Connection getConnection() throws Exception{
//oracle DB연결
Calss.forName("oracle.jdbc.OracleDriver");
Connetcion con=DriverManager.getConnection("jdbc:oracle:thin:@//localhost:1521/xe","java0514","1234");
return con; //return이 존재하기 때문에 void가 없어지고 자료형인 Conneciton이 들어감
}//getConnection() end
}//class end
//DBClose.java
package net.utility;
import java.sql.Connection;
public class DBClose{
}//class end
5. sungjukbean 폴더, net.sungjuk 패키지 생성
- Java Resources → src → net.sungjuk 패키지 생성 → SungjukDAO.java / SungjukDTO.java 생성
6. Java Bean 생성
6-1) Sungjuk DTO
package net.sungjuk;
public class SungjukDTO{
//sungjukbean - sungjukIns에 int cnt=dao.insert(uname, kor, eng, mat, aver, addr); 처럼 다 넣지 않아도 되는 방법
//sungjuk테이블의 칼럼을 기준으로 field를 선언한다
private int sno;
private String uname;
private int kor;
private int eng;
private int mat;
private int aver;
private String addr;
private String wdate;
//default constructor
public SugnjukDTO(){}
//각 field에 접근 할 수 있는 getter, setter 함수
//Source - Generate Getters and Setters...
public int getSno() {
return sno;
}
public void setSno(int sno) {
this.sno = sno;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public int getKor() {
return kor;
}
public void setKor(int kor) {
this.kor = kor;
}
public int getEng() {
return eng;
}
public void setEng(int eng) {
this.eng = eng;
}
public int getMat() {
return mat;
}
public void setMat(int mat) {
this.mat = mat;
}
public int getAver() {
return aver;
}
public void setAver(int aver) {
this.aver = aver;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public String getWdate() {
return wdate;
}
public void setWdate(String wdate) {
this.wdate = wdate;
}
//개발자들이 에러 확인용으로 주로 사용
//Source → Generate toString()...
@Override
public String toString() {
return "SungjukDTO [sno=" + sno + ", uname=" + uname + ", kor=" + kor
+ ", eng=" + eng + ", mat=" + mat + ", aver=" + aver
+ ", addr=" + addr + ", wdate=" + wdate + "]";
}
}//class end
6-2) sungjukDAO.java
package net.sungjuk;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.concurrent.ExecutionException;
import net.utility.DBOpen;
public class SungjukDAO {
//Data Access Objct 데이터베이스 관련 작업
//1-1) 성적 데이터 삽입
public int insert(String uname, int kor, int eng, int mat, int aver, String addr){
int cnt=0;
try{
// DB연결: DBOpen.java와 연결한다
Connection con=DBOpen.getConnection();
StringgBuilder sql=new StringBuilder();
//Insert SQL문 작성
sql.append(" INSERT INTO sungjuk (sno, uname, kor, eng, mat, aver, addr, wdate) ");
sql.append(" VALUES((SELECT NVL(MAX(sno), 0)+1 FROM sugnjuk) ");
sql.append(" , ?, ?, ?, ?, ?, ?, sysdate) ");
//SQL문 변환
PreparedStatement pstmt=null;
pstmt=con.prepareStatement(sql.toString());
//Value값 불러오기
pstmt.setString(1, uname);
pstmt.setInt(2, kor);
pstmt.setInt(3, eng);
pstmt.setInt(4, mat);
pstmt.setInt(5, aver);
pstmt.setString(6, addr);
//실행
cnt=pstmt.executeUpdate();
}catch(Exception e){
System.out.println("행추가 실패 : " + e);
}//try end
//행 개수 리턴
return cnt;
}//insert() end
//1-2) 성적 데이터 삽입
public int insert(SungjukDTO dto){
int cnt=0;
try{
// DB연결: DBOpen.java와 연결한다
Connection con=DBOpen.getConnection();
StringgBuilder sql=new StringBuilder();
//Insert SQL문 작성
sql.append(" INSERT INTO sungjuk (sno, uname, kor, eng, mat, aver, addr, wdate) ");
sql.append(" VALUES((SELECT NVL(MAX(sno), 0)+1 FROM sugnjuk) ");
sql.append(" , ?, ?, ?, ?, ?, ?, sysdate) ");
//SQL문 변환
PreparedStatement pstmt=null;
pstmt=con.prepareStatement(sql.toString());
//Value값 불러오기
pstmt.setString(1, dto.getUname());
pstmt.setInt(2, dto.getKor());
pstmt.setInt(3, dto.getEng());
pstmt.setInt(4, dto.getMat());
pstmt.setInt(5, dto.getAver());
pstmt.setString(6, dto.getAddr);
//실행
cnt=pstmt.executeUpdate();
}catch(Exception e){
System.out.println("행추가 실패 : "+e);
}//try end
return cnt;
}//insert() end
//2) 성적데이터 목록
//DB에서 가져온 데이터 (이름, 성적, 평균 등)를 list에 모아서 SungjukDTO자료형으로 ArrayList에 담는다
//→ 이 때 자료형 주의할 것
public ArrayList<SungjukDTO> list(){
//테이블을 온전히 담을 수 있는 자료형을 만들어줌
ArrayList<SungjukDTO> list=null;
try{
Connetion con=DBOpen.getConnection();
StringBuilder sql=new StringBuilder();
sql.append(" SELECT sno, uname, kor, eng, mat, wdate ");
sql.append(" FROM sungjuk ");
sql.append(" ORDER BY wdate DESC");
PreparedStatement pstmt=con.prepareSttement(sql.toString());
//결과를 rs에 저장, ResultSet은 결과를 저장하는 하나의 집합 (select 할 때 등장)
ResultSet rs=pstmt.executeQuery();
//rs의 내용을 next로 읽음
if(rs.next()){
// list에 ArrayList<SungjukDTO>로 차곡차곡 저장
list=new ArrayList<SungjukDTO>();
do{
SungjukDTO dto=new SungjukDTO(); //한 줄씩 저장
dto.setSno(rs.getInt("sno"));
dto.set(Uname(rs.getString("uname"));
dto.setKor(rs.getInt("kor"));
dto.setEng(rs.getInt("eng"));
dto.setMat(rs.getInt("mat"));
dto.setWdate(rs.getString("wdate"));
list.add(ddto);
}while(rs.next());
}else{
list=null //else가 없어도 상관은 없지만 자료가 없으면 null을 넣어줌.
}//if end
}catch(Exception e){
System.out.println("목록실패 : "+ e);
}//try end
return list;
}//list() end
//3) 성적데이터 조회
public SungjukDTO read(int sno){ //sungjukRead.jsp의 변수 sno를 구해야 함
SungjukDTO dto=null;
try{
Connection con=DBOpen.getConnection;
StringBuilder sql=new StringBuilder();
sql.append(" SELECT sno, uname, kor, eng, mat, aver, addr, wdate "); //'상세보기' 이기 때문에 다 넣어주기
sql.append(" FROM sungjuk ");
sql.append(" WHERE sno=? ");
PreparedStatement pstmt=con.prepareStatement(sql.toString());
pstmt.setInt(1, sno); //물음표가 1개이기 때문에 1개 sno
ResultSet rs=pstmt.executeQuery();
if(rs.next()){
dto=new SungjukDTO();
dto.setSno(rs.getInt("sno"));
dto.setUname(rs.getInt("uname"));
dto.setKor(rs.getInt("kor"));
dto.setEng(rs.getInt("eng"));
dto.setMat(rs.getInt("mat"));
dto.setAver(rs.getInt("aver"));
dto.setAddr(rs.getInt("addr"));
dto.setWdate(rs.getInt("wdate"));
}else{
dto=null; // 자료가 없으면 null
}//if end
}catch(Exception e){
System.out.println("상세보기 실패 : "+e);
}//try end
return dto;
}//read() end
//4) 성적데이터 삭제
public int delete(int sno){
int cnt=0;
try{
Connection con=DBOpen.getConnection();
StringBuilder sql=new StringBuilder();
sql.append(" DELETE FROM sungjuk ");
sql.append(" WHERE sno=? ");
PreparedStatement pstmt=con.prepareStatement(sql.toString());
pstmt.setInt(1, sno);
cnt=pstmt.executeUpdate();
}catch(Exception e){
System.out.println("삭제 실패 : " +e);
}//try end
return cnt;
}//delete() end
//5) 성적데이터 수정
public int updateproc(SungjukDTO dto){
int cnt=0;
try{
Connection con=DBOpen.getConnection();
StringBuilder sql=new StringBuilder();
sql.append(" UPDATE sungjuk ");
sql.append(" SET uname=?, kor=?, eng=?, mat=?, aver=?, addr=? ");
sql.append(" WHERE sno=? ");
PreparedStatement pstmt=con.prepareStatement(sql.toString());
pstmt.setString(1, dto.getUname());
pstmt.setInt(2, dto.getKor());
pstmt.setInt(3, dto.getEng());
pstmt.setInt(4, dto.getMat());
pstmt.setInt(5, dto.getAver());
pstmt.setString(6, dto.getAddr());
pstmt.setInt(7, dto.getSno());
//실행횟수를 cnt에 담기
cnt=pstmt.executeUpdate();
}catch(Exception e){
System.out.println("수정 실패 : "+e);
}//try end
return cnt;
}//updateproc() end
}//class end
7. 뷰페이지
7-1) sungjukForm.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8>
<title>sungjukForm.jsp</title>
</head>
<body>
<h1></h1>
<p><a href="sungjukList.jsp">[성적목록]</a></p>
<form method="post" action="sungjukIns.jsp">
<table border="1">
<tr>
<th>이름</th>
<td>
<input type="text" name="uname" maxlength="20" required autofocus>
</td>
</tr>
<tr>
<th>국어</th>
<td>
<input type="text" name="kor" size="5" min="0" max="100" placeholder="숫자입력">
</td>
</tr>
<tr>
<th>영어</th>
<td>
<input type="text" name="eng" size="5" min="0" max="100" placeholder="숫자입력">
</td>
</tr>
<tr>
<th>수학</th>
<td>
<input type="text" name="mat" size="5" min="0" max="100" placeholder="숫자입력">
</td>
</tr>
<tr>
<th>주소</th>
<td>
<select name="addr">
<option value="Seoul">서울</option>
<option value="Jeju">제주</option>
<option value="Busan">부산</option>
<option value="Suwon">수원</option>
</select>
</td>
<tr>
<td colspan="2" align="center">
<input type="submit" value="전송">
<input type="reset" value="취소">
</td>
</tr>
</table>
</form>
</body>
</html>
7-2) sungjukIns.jsp
<%@ page contentType="text/html; charest=UTF-8"%>
<%@ page import="net.sungjuk.*"%>
<jsp:useBean id="dao" class="net.sungjuk.SungjukDAO"></jsp:useBean>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8>
<title>sungjukIns.jsp</title>
</head>
<body>
<h1>* 성적 결과*</h1>
<p><a href="sungjukForm.jsp">[성적쓰기]</a></p>
<%
//한글 인코딩
request.setCharacterEncoding("UTF-8");
String uname =request.getParameter("uname").trim();
int kor =Interger.parseInt(request.getParameter("kor").trim();
int eng =Interger.parseInt(request.getParameter("eng").trim();
int mat =Interger.parseInt(request.getParameter("mat").trim();
String addr =request.getParameter("addr").trim();
//1-1) dto 객체를 사용하기전
int cnt=dao.insert(uname, kor, eng, mat, aver, addr);
//1-2)dto 객체를 사용한 경우 (추천방법)
//→ 전달값을 모두 dto객체에 담기 (한 주머니 set 안에 들어가 있는 것)
dto.setUname(uname);
dto.setKor(kor);
dto.setEng(eng);
dto.setMat(mat);
dto.setAver(aver);
dto.setAddr(addr);
int cnt=dao.insert(dto);
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.prtinln(" location.href='sungjukList.jsp';");
out.println("</script>");
}//if end
%>
</body>
</html>
7-3) sungjukList.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page import="java.io.*"%>
<%@ page import="java.sql.*"%>
<%@ page import="java.util.*"%>
<%@ page import="net.sungjuk.*"%>
<jsp:useBean id="dao" class="net.sungjuk.SungjukDAO" scope="page"></jsp:useBean>
<jsp:useBean id="dto" class="net.sungjuk.SungjukDTO" scope="page"></jsp:useBean>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8>
<title>sungjukList.jsp</title>
</head>
<body>
<h1>* 성적 목록 *</h1>
<p><a href="sungjukForm.jsp">[성적쓰기]</a></p>
<table border="1">
<tr>
<th>이름</th>
<th>국어</th>
<th>영어</th>
<th>수학</th>
<th>등록일</th>
</tr>
<%
//페이지는 서로 다른 각자의 페이지, 연결 된 것처럼 보이지만 자료를 끌어오는 것은 SungjukDAO, 보여주는 페이지는 sungjuklist
//전체목록
ArrayList<SungjukDTO> list=dao.list();
if(list=null){
out.println("<tr>");
out.println(" <td colspan='5'>글 없음 T.T</td>");
out.println("</tr>"
}else{
for(int idx=0; idx<list.size(); idx++){
dto=list.get(idx); //한 줄 꺼내 온 것을 다시 dto에 담아줌
%>
<tr>
//'이름'에 상세보기 에 해당하는 sungjukRead.jsp를 링크를 걸어줌
<td><a href="sungjukRead.jsp?sno=<%=dto.getSno()%>"><%=dto.getUname()%></td>
<td><%=dto.getKor()%></td>
<td><%=dto.getEng()%></td>
<td><%=dto.getMat()%></td>
<td><%=dto.getWdate()%></td>
</tr>
<%
}
}//if end
%>
</table>
</body>
</html>
7-4) sungjukRead.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page import="java.io.*"%>
<%@ page import="java.sql.*"%>
<%@ page import="java.util.*"%>
<%@ page import="net.sungjuk.*"%>
<jsp:useBean id="dao" class="net.sungjuk.SungjukDAO" scope="page"></jsp:useBean>
<jsp:useBean id="dto" class="net.sungjuk.SungjukDTO" scope="page"></jsp:useBean>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8>
<title>sungjukRead.jsp</title>
</head>
<body>
<h1>*성적 상세보기*</h1>
<p>
<a href="sungjukForm.jsp">[성적쓰기]</a>
<a href="sungjukList.jsp">[성적목록]</a>
</p>
<%
int sno=Integer.parseInt(request.getParameter("sno"));
//위에 useBean을 이용해서 id와 class를 지정했기 때문에 다 쓰지 않고 dto를 가져옴
dto=dao.read(sno);
if(dto==null){
out.print("해당 글 없음T.T");
}else{
%>
<table border="1">
<tr>
<th>이름</th>
<td><%=dto.getUname()%></td>
</tr>
<tr>
<th>국어</th>
<td><%=dto.getKor()%></td>
</tr>
<tr>
<th>영어</th>
<td><%=dto.getEng()%></td>
</tr>
<tr>
<th>수학</th>
<td><%=dto.getMat()%></td>
</tr>
<tr>
<th>이름</th>
<td><%=dto.getUname()%></td>
</tr>
<tr>
<th>평균</th>
<td><%=dto.getAver()%></td>
</tr>
<tr>
<th>주소</th>
<td><%=dto.getAddr()%>
<%
//주소를 한글로 나타내기 위함
String addr=dto.getAddr();
if(addr.equals("Seoul")){
out.println("서울");
}else if(addr.equals("Busan")){
out.println("부산");
}else if(addr.equals("Suwon")){
out.println("수원");
}else if(addr.equals("Jeju")){
out.println("제주");
}//if end
%>
</td>
</tr>
<tr>
<th>등록일</th>
<td><%=dto.getWdate()%></td>
</tr>
</table>
<br><br>
<a href="sungjukUpdate.jsp?sno=<%=sno%>">[수정]</a>
<a href="sungjukDelete.jsp?sno=<%=sno%>">[삭제]</a>
<%
}//if end
%>
</body>
</html>
+) ssi. jsp
⊙ 자주 쓰는 것들만 따로 모아서 사용
<%@ page contentType="text/html; charset=UTF-8"%>
<%@page import="java.io.*"%>
<%@page import="java.sql.*"%>
<%@page import="java.util.*"%>
<%@page import="net.sungjuk.*" %>
<jsp:useBean id="dao" class="net.sungjuk.SungjukDAO" scope="page"></jsp:useBean>
<jsp:useBean id="dto" class="net.sungjuk.SungjukDTO" scope="page"></jsp:useBean> <!-- scope 는 넣어도 되고 안 넣어도 됨 -->
<%
//ssi.jsp 공통페이지
//한글 인코딩
request.setCharacterEncoding("UTF-8");
%>
7-5) sungjukDel.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ include file="ssi.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8>
<title>sungjukDel.jsp</title>
</head>
<body>
<h1>* 성적 삭제 *</h1>
<p>
<a href="sungjukList.jsp">[성적목록]</a>
<a href="sungjukForm.jsp">[성적쓰기]</a>
</p>
<%
int sno=Integer.parseInt(request.getParameter("sno"));
int cnt=dao.delete(sno);
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>");
}//if end
%>
</body>
</html>
7-6) sungjukUpdate.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ include file="ssi.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8>
<title>sungjukUpdate.jsp</title>
</head>
<body>
<h1>*성적 수정*</h1>
<p>
<a href="sungjukForm.jsp">[성적쓰기]</a>
<a href="sungjukList.jsp">[성적목록]</a>
</p>
<%
int sno=Integer.parseInt(request.getParameter("sno"));
dto=dao.read(sno); //read를 재활용, 우리가 가져온 것을 dto에
if(dto==null){
out.print("해당 글 없음T.T");
}else{
%>
<form method="post" action="sunjukUpdateProc.jsp">
<input type="hidden" name="sno" value="<%=sno%>"> <!-- 행수정을 위해서 sql문에서 작성했을 때 sno가 필요했는데 sno를 가져올 필요가 없어서 안가져왔지만 필요하기 때문에 hidden 값으로서 가져옴 -->
<table border="1">
<tr>
<th>이름</th>
<td>
<input type="text" name="uname" value="<%=dto.getUname() %>" maxlength="20" required autofocus> <!-- sungjuk에서 만든 Read의 테이블 복사 해오되 rs → dto -->
</td>
</tr>
<tr>
<th>국어</th>
<td>
<input type="number" name="kor" value="<%=dto.getKor() %>" size="5" min="0" max="100" placeholder="숫자입력">
</td>
</tr>
<tr>
<th>영어</th>
<td>
<input type="number" name="eng" value="<%=dto.getEng() %>" size="5" min="0" max="100" placeholder="숫자입력">
</td>
</tr>
<tr>
<th>수학</th>
<td>
<input type="number" name="mat" value="<%=dto.getMat() %>" size="5" min="0" max="100" placeholder="숫자입력">
</td>
</tr>
<tr>
<th>주소</th>
<td>
<%
String addr=dto.getAddr();
%>
<select name="addr"> <!-- selected 라는 속성이 추가 되어야 수정됨, selected : 처음 선택할때 지정되어 있는 것 -->
<option value="Seoul" <%if(addr.equals("Seoul")) {out.print("selected");} %>>서울</option> <!-- '서울'이 지정되어 있는 사람은 서울을 selected 하라는 것 -->
<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">
<input type="submit" value="전송">
<input type="reset" value="취소">
</td>
</tr>
</table>
</form>
<%
}//if end
%>
</body>
</html>
7-7) sungjukUpdateProc.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ include file="ssi.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8>
<title>sunjukUpdateProc.jsp</title>
</head>
<body>
<h1>* 성적 수정 결과 *</h1>
<p>
<a href="sungjukList.jsp">[성적목록]</a>
<a href="sungjukForm.jsp">[성적쓰기]</a>
</p>
<%
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;
//dto에 담아서 한번에 updateproc로 넘김
dto.setUname(uname);
dto.setKor(kor);
dto.setEng(eng);
dto.setMat(mat);
dto.setAver(aver);
dto.setAddr(addr);
dto.setSno(sno);
int cnt=dao.updateproc(dto);
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>");
}//if end
%>
</body>
</html>
'JSP' 카테고리의 다른 글
HTTP Status 500 - java.lang.NumberFormatException: null (0) | 2019.09.25 |
---|---|
[JSP] HTTP Status 500 - java.lang.NumberFormatException: null (0) | 2019.08.30 |
[JSP] JAVA 빈즈 (id, 객체 등) 개요 / 예제 비교 (0) | 2019.08.28 |
[JSP] 성적프로그램 2 (0) | 2019.08.27 |
[JSP] request내부객체 / 성적 프로그램 만들기1 / 한글인코딩 (0) | 2019.08.26 |