📃 n명의 이름과 각 과목별 성적을 입력받아 총점과 평균을 계산하여 리스트를 출력해주는 프로그램 구현
→ 구현 기능 : 데이터 입력, 리스트 출력, 리스트 전체 인원 수
# sql 파일은 따로 기록 x (WebApp11_scott.sql)
# MemberDTO는 TBL_MEMBER 테이블의 컬럼 구조에 맞춰 String sid, name, int kor, mat, eng, tot, double avg 의 getter/ setter 구성
# ScoreDAO.java
- DB 연결, 데이터 입력, 리스트 출력, 전체 인원 수 조회, DB 연결 종료 메소드 정의하기
① DB 연결
public ScoreDAO() throws ClassNotFoundException, SQLException
{
conn = DBConn.getConnection();
}
② 데이터 입력 메소드 정의
public int add(ScoreDTO dto) throws SQLException
{
int result = 0;
String sql = "INSERT INTO TBL_SCORE(SID, NAME, KOR, ENG, MAT) VALUES(SCORESEQ.NEXTVAL, ?, ?, ?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, dto.getName());
pstmt.setInt(2, dto.getKor());
pstmt.setInt(3, dto.getEng());
pstmt.setInt(4, dto.getMat());
result = pstmt.executeUpdate();
pstmt.close();
return result;
}
③ 리스트 출력 메소드 정의
public ArrayList<ScoreDTO> lists() throws SQLException
{
ArrayList<ScoreDTO> result = new ArrayList<ScoreDTO>();
String sql = "SELECT SID, NAME, KOR, ENG, MAT, (KOR+ENG+MAT) AS TOT, (KOR+ENG+MAT)/3 AS AVG FROM TBL_SCORE ORDER BY SID";
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while(rs.next())
{
ScoreDTO dto = new ScoreDTO();
dto.setSid(rs.getString("SID"));
dto.setName(rs.getString("NAME"));
dto.setKor(rs.getInt("KOR"));
dto.setEng(rs.getInt("ENG"));
dto.setMat(rs.getInt("MAT"));
dto.setTot(rs.getInt("TOT"));
dto.setAvg(rs.getDouble("AVG"));
result.add(dto);
}
rs.close();
pstmt.close();
return result;
}
④ 전체 인원 수 메소드 정의
public int count() throws SQLException
{
int result = 0;
String sql = "SELECT COUNT(*) AS COUNT FROM TBL_SCORE";
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while(rs.next())
{
result = rs.getInt("COUNT");
}
rs.close();
pstmt.close();
return result;
}
⑤ DB 연결 종료
public void close() throws SQLException
{
DBConn.close();
}
# ScoreList.jsp
→ 사용자가 접하게 되는 페이지
① 페이지 레이아웃 구성
<body>
<div>
<form action="ScoreInsert.jsp" method="post" onsubmit="return formCheck();">
<table class="table">
<tr>
<th>이름(*)</th>
<td>
<input type="text" name="userName" id="userName" class="txt">
<span class="errMsg" id="nameMsg">이름을 입력해야 합니다.</span>
</td>
</tr>
<tr>
<th>국어점수</th>
<td>
<input type="text" name="kor" id="kor" class="txt">
<span class="errMsg" id="korMsg">0 ~ 100 사이의 정수를 입력해야 합니다.</span>
</td>
</tr>
<tr>
<th>영어점수</th>
<td>
<input type="text" name="eng" id="eng" class="txt">
<span class="errMsg" id="engMsg">0 ~ 100 사이의 정수를 입력해야 합니다.</span>
</td>
</tr>
<tr>
<th>수학점수</th>
<td>
<input type="text" name="mat" id="mat" class="txt">
<span class="errMsg" id="matMsg">0 ~ 100 사이의 정수를 입력해야 합니다.</span>
</td>
</tr>
<tr>
<td colspan="2">
<button type="submit" class="btn">회원 추가</button>
</td>
</tr>
</table>
</form>
</div>
<div>
<%=memberCount %>
<%=str.toString() %>
</div>
</body>
② 자바스크립트 영역 구성
- 필수 항목 입력하지 않았거나 조건에 맞지 않게 입력했을 경우 폼 제출되지 않도록 하는 기능
<script type="text/javascript">
function formCheck()
{
var userName = document.getElementById("userName");
var nameErr = document.getElementById("nameMsg");
var kor = document.getElementById("kor");
var korErr = document.getElementById("korMsg");
var eng = document.getElementById("eng");
var engErr = document.getElementById("engMsg");
var mat = document.getElementById("mat");
var matErr = document.getElementById("matMsg");
nameErr.style.display = "none";
korErr.style.display = "none";
engErr.style.display = "none";
matErr.style.display = "none";
if(userName.value == "")
{
nameErr.style.display = "inline";
return false;
}
if(kor.value == "" || parseInt(kor.value)<0 || parseInt(kor.value)>100)
{
korErr.style.display = "inline";
return false;
}
if(eng.value == "" || parseInt(eng.value)<0 || parseInt(eng.value)>100)
{
engErr.style.display = "inline";
return false;
}
if(mat.value == "" || parseInt(mat.value)<0 || parseInt(mat.value)>100)
{
matErr.style.display = "inline";
return false;
}
return true;
}
</script>
③ 스크립릿 영역 구성
<%
StringBuffer str = new StringBuffer();
ScoreDAO dao = null;
String memberCount = "<span id = 'memberCount'>전체 인원 수 : ";
try
{
dao = new ScoreDAO();
memberCount += dao.count() + "명</span>";
str.append("<table class='table'>");
str.append("<tr><th>번호</th><th>이름</th><th>국어점수</th><th>영어점수</th><th>수학점수</th><th>총점</th><th>평균</th></tr>");
for (ScoreDTO score : dao.lists())
{
str.append("<tr>");
str.append("<td class='record'>" + score.getSid() + "</td>");
str.append("<td class='record'>" + score.getName() + "</td>");
str.append("<td class='record'>" + score.getKor() + "</td>");
str.append("<td class='record'>" + score.getEng() + "</td>");
str.append("<td class='record'>" + score.getKor() + "</td>");
str.append("<td class='record'>" + score.getTot() + "</td>");
str.append("<td class='record'>" + score.getAvg() + "</td>");
str.append("</tr>");
}
str.append("</table>");
}
catch(Exception e)
{
System.out.println(e.toString());
}
finally
{
try
{
dao.close();
}
catch(Exception e)
{
System.out.println(e.toString());
}
}
%>
# ScoreInsert.jsp
<%@page import="com.test.ScoreDAO"%>
<%@page import="com.test.ScoreDTO"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
String userName = request.getParameter("userName");
String korStr = request.getParameter("kor");
String engStr = request.getParameter("eng");
String matStr = request.getParameter("mat");
int kor = Integer.parseInt(korStr);
int eng = Integer.parseInt(engStr);
int mat = Integer.parseInt(matStr);
ScoreDAO dao = null;
try
{
dao = new ScoreDAO();
ScoreDTO dto = new ScoreDTO();
dto.setName(userName);
dto.setKor(kor);
dto.setEng(eng);
dto.setMat(mat);
dao.add(dto);
}
catch(Exception e)
{
System.out.println(e.toString());
}
finally
{
try
{
dao.close();
}
catch(Exception e)
{
System.out.println(e.toString());
}
}
response.sendRedirect("ScoreList.jsp");
%>
📃 n명의 이름과 각 과목별 성적을 입력받아 총점과 평균을 계산하여 리스트를 출력해주는 프로그램 구현
→ 구현 기능 : 데이터 입력, 리스트 출력, 리스트 전체 인원 수
# sql 파일은 따로 기록 x (WebApp11_scott.sql)
# MemberDTO는 TBL_MEMBER 테이블의 컬럼 구조에 맞춰 String sid, name, int kor, mat, eng, tot, double avg 의 getter/ setter 구성
# ScoreDAO.java
- DB 연결, 데이터 입력, 리스트 출력, 전체 인원 수 조회, DB 연결 종료 메소드 정의하기
① DB 연결
public ScoreDAO() throws ClassNotFoundException, SQLException { conn = DBConn.getConnection(); }
② 데이터 입력 메소드 정의
public int add(ScoreDTO dto) throws SQLException { int result = 0; String sql = "INSERT INTO TBL_SCORE(SID, NAME, KOR, ENG, MAT) VALUES(SCORESEQ.NEXTVAL, ?, ?, ?, ?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, dto.getName()); pstmt.setInt(2, dto.getKor()); pstmt.setInt(3, dto.getEng()); pstmt.setInt(4, dto.getMat()); result = pstmt.executeUpdate(); pstmt.close(); return result; }
③ 리스트 출력 메소드 정의
public ArrayList<ScoreDTO> lists() throws SQLException { ArrayList<ScoreDTO> result = new ArrayList<ScoreDTO>(); String sql = "SELECT SID, NAME, KOR, ENG, MAT, (KOR+ENG+MAT) AS TOT, (KOR+ENG+MAT)/3 AS AVG FROM TBL_SCORE ORDER BY SID"; PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery(); while(rs.next()) { ScoreDTO dto = new ScoreDTO(); dto.setSid(rs.getString("SID")); dto.setName(rs.getString("NAME")); dto.setKor(rs.getInt("KOR")); dto.setEng(rs.getInt("ENG")); dto.setMat(rs.getInt("MAT")); dto.setTot(rs.getInt("TOT")); dto.setAvg(rs.getDouble("AVG")); result.add(dto); } rs.close(); pstmt.close(); return result; }
④ 전체 인원 수 메소드 정의
public int count() throws SQLException { int result = 0; String sql = "SELECT COUNT(*) AS COUNT FROM TBL_SCORE"; PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery(); while(rs.next()) { result = rs.getInt("COUNT"); } rs.close(); pstmt.close(); return result; }
⑤ DB 연결 종료
public void close() throws SQLException { DBConn.close(); }
# ScoreList.jsp
→ 사용자가 접하게 되는 페이지
① 페이지 레이아웃 구성
<body> <div> <form action="ScoreInsert.jsp" method="post" onsubmit="return formCheck();"> <table class="table"> <tr> <th>이름(*)</th> <td> <input type="text" name="userName" id="userName" class="txt"> <span class="errMsg" id="nameMsg">이름을 입력해야 합니다.</span> </td> </tr> <tr> <th>국어점수</th> <td> <input type="text" name="kor" id="kor" class="txt"> <span class="errMsg" id="korMsg">0 ~ 100 사이의 정수를 입력해야 합니다.</span> </td> </tr> <tr> <th>영어점수</th> <td> <input type="text" name="eng" id="eng" class="txt"> <span class="errMsg" id="engMsg">0 ~ 100 사이의 정수를 입력해야 합니다.</span> </td> </tr> <tr> <th>수학점수</th> <td> <input type="text" name="mat" id="mat" class="txt"> <span class="errMsg" id="matMsg">0 ~ 100 사이의 정수를 입력해야 합니다.</span> </td> </tr> <tr> <td colspan="2"> <button type="submit" class="btn">회원 추가</button> </td> </tr> </table> </form> </div> <div> <%=memberCount %> <%=str.toString() %> </div> </body>
② 자바스크립트 영역 구성
- 필수 항목 입력하지 않았거나 조건에 맞지 않게 입력했을 경우 폼 제출되지 않도록 하는 기능
<script type="text/javascript"> function formCheck() { var userName = document.getElementById("userName"); var nameErr = document.getElementById("nameMsg"); var kor = document.getElementById("kor"); var korErr = document.getElementById("korMsg"); var eng = document.getElementById("eng"); var engErr = document.getElementById("engMsg"); var mat = document.getElementById("mat"); var matErr = document.getElementById("matMsg"); nameErr.style.display = "none"; korErr.style.display = "none"; engErr.style.display = "none"; matErr.style.display = "none"; if(userName.value == "") { nameErr.style.display = "inline"; return false; } if(kor.value == "" || parseInt(kor.value)<0 || parseInt(kor.value)>100) { korErr.style.display = "inline"; return false; } if(eng.value == "" || parseInt(eng.value)<0 || parseInt(eng.value)>100) { engErr.style.display = "inline"; return false; } if(mat.value == "" || parseInt(mat.value)<0 || parseInt(mat.value)>100) { matErr.style.display = "inline"; return false; } return true; } </script>
③ 스크립릿 영역 구성
<% StringBuffer str = new StringBuffer(); ScoreDAO dao = null; String memberCount = "<span id = 'memberCount'>전체 인원 수 : "; try { dao = new ScoreDAO(); memberCount += dao.count() + "명</span>"; str.append("<table class='table'>"); str.append("<tr><th>번호</th><th>이름</th><th>국어점수</th><th>영어점수</th><th>수학점수</th><th>총점</th><th>평균</th></tr>"); for (ScoreDTO score : dao.lists()) { str.append("<tr>"); str.append("<td class='record'>" + score.getSid() + "</td>"); str.append("<td class='record'>" + score.getName() + "</td>"); str.append("<td class='record'>" + score.getKor() + "</td>"); str.append("<td class='record'>" + score.getEng() + "</td>"); str.append("<td class='record'>" + score.getKor() + "</td>"); str.append("<td class='record'>" + score.getTot() + "</td>"); str.append("<td class='record'>" + score.getAvg() + "</td>"); str.append("</tr>"); } str.append("</table>"); } catch(Exception e) { System.out.println(e.toString()); } finally { try { dao.close(); } catch(Exception e) { System.out.println(e.toString()); } } %>
# ScoreInsert.jsp
<%@page import="com.test.ScoreDAO"%> <%@page import="com.test.ScoreDTO"%> <%@ page contentType="text/html; charset=UTF-8"%> <% request.setCharacterEncoding("UTF-8"); String userName = request.getParameter("userName"); String korStr = request.getParameter("kor"); String engStr = request.getParameter("eng"); String matStr = request.getParameter("mat"); int kor = Integer.parseInt(korStr); int eng = Integer.parseInt(engStr); int mat = Integer.parseInt(matStr); ScoreDAO dao = null; try { dao = new ScoreDAO(); ScoreDTO dto = new ScoreDTO(); dto.setName(userName); dto.setKor(kor); dto.setEng(eng); dto.setMat(mat); dao.add(dto); } catch(Exception e) { System.out.println(e.toString()); } finally { try { dao.close(); } catch(Exception e) { System.out.println(e.toString()); } } response.sendRedirect("ScoreList.jsp"); %>