JSP & Servlet :: DAO와 DTO를 활용한 데이터베이스 연결 실습 (성적 처리 프로그램)

2023. 12. 13. 22:53· 📚 Study/JSP & Servlet
목차
  1. # ScoreDAO.java
  2. # ScoreList.jsp
  3. # ScoreInsert.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");
%>
저작자표시 (새창열림)
  1. # ScoreDAO.java
  2. # ScoreList.jsp
  3. # ScoreInsert.jsp
'📚 Study/JSP & Servlet' 카테고리의 다른 글
  • JSP & Servlet :: JSP 액션 태그 실습
  • JSP & Servlet :: JSP 액션 태그와 자바 빈즈(JAVA Bean)
  • JSP & Servlet :: DAO와 DTO를 활용한 데이터베이스 연결 실습 (회원 관리 프로그램)
  • JSP & Servlet :: 데이터베이스 연결 실습 (성적 처리 프로그램)
bono-hye
bono-hye
bono-hye
공부를 합시다👩🏻‍💻
bono-hye
전체
오늘
어제
  • 분류 전체보기 (506)
    • 📚 Study (225)
      • Java (148)
      • Oracle (28)
      • JDBC (4)
      • Javascript (9)
      • JSP & Servlet (19)
      • JQuery (6)
      • Spring (9)
      • Springboot (0)
      • 개인 공부 (2)
    • ✏️ 문제풀이 (280)
      • 백준 (181)
      • 프로그래머스 (99)

블로그 메뉴

  • 홈
  • 글쓰기
  • 관리
hELLO · Designed By 정상우.v4.2.1
bono-hye
JSP & Servlet :: DAO와 DTO를 활용한 데이터베이스 연결 실습 (성적 처리 프로그램)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.