📃 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");
%>