Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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 31
Archives
Today
Total
관리 메뉴

Everything has an expiration date

[JSP & JDBC & Oracle] 20231213 [프로그램소스 (JAVA Bean + JSP)] - MemberDTO, MemberDAO, WebApp10_scott, MemberList, MemberInsert 본문

[JSP & JDBC & Oracle]/Program source (JSP & JDBC & Oracle)

[JSP & JDBC & Oracle] 20231213 [프로그램소스 (JAVA Bean + JSP)] - MemberDTO, MemberDAO, WebApp10_scott, MemberList, MemberInsert

Jelly-fish 2023. 12. 13. 12:47

 

 

WebApp10

 


01
MemberList, MemberInsert(뒷단 Logic, 데이터베이스 연결 처리)


 

 

MemberDTO.java

 

/*====================================
 	MemberDTO.java
 	- 데이터 보관 및 전송 객체 활용
=====================================*/


package com.test;

public class MemberDTO
{
	// 주요 속성 구성
	private String sid, name, tel;
	//-- TBL_MEMBER 테이블의 컬럼 구조

	// getter / setter 구성
	public String getSid()
	{
		return sid;
	}

	public void setSid(String sid)
	{
		this.sid = sid;
	}

	public String getName()
	{
		return name;
	}

	public void setName(String name)
	{
		this.name = name;
	}

	public String getTel()
	{
		return tel;
	}

	public void setTel(String tel)
	{
		this.tel = tel;
	}
	
	
}

 


 

MemberDAO.java

 

/*============================================
 	MemberDAO.java
 	- 데이터베이스 액션 처리 전용 객체 활용
=============================================*/


package com.test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import com.util.DBConn;

public class MemberDAO
{
	// 주요 속성 구성
	private Connection conn;
	
	
	// 데이터베이스 연결 → 생성자 형태로 정의
	public MemberDAO() throws ClassNotFoundException, SQLException
	{
		conn = DBConn.getConnection();
	}
	
	
	// 데이터 입력 메소드 정의
	public int add(MemberDTO dto) throws SQLException
	{
		int result = 0;
		
		// 쿼리문 준비
//		String sql = String.format("INSERT INTO TBL_MEMBER(SID, NAME, TEL)"
//							     + "VALUES(MEMBERSEQ.NEXTVAL, '%s', '%s')"
//							      , dto.getName(), dto.getTel());
		
		// 【PreparedStatement 사용!】
		String sql = "INSERT INTO TBL_MEMBER(SID, NAME, TEL)VALUES(MEMBERSEQ.NEXTVAL, ?, ?)";
		
		// 스테이트먼트 객체 생성
//		Statement stmt = conn.createStatement();
		PreparedStatement pstmt = conn.prepareStatement(sql);
		pstmt.setString(1, dto.getName());
		pstmt.setString(2, dto.getTel());
		
		// excuteUpdate (Statement)
//		result = stmt.executeUpdate(sql);
		result = pstmt.executeUpdate();
		
//		stmt.close();
		pstmt.close();
		
		return result;
		
	}
	
	// 리스트 출력 메소드 정의
	public ArrayList<MemberDTO> lists() throws SQLException
	{
		ArrayList<MemberDTO> memList = new ArrayList<MemberDTO>();
		
		// 쿼리문 준비
		String sql = "SELECT SID, NAME, TEL FROM TBL_MEMBER ORDER BY SID";
		
		// 스테이트먼트 객체 생성
//		Statement stmt = conn.createStatement();
		
		// 프리페어드 스테이트먼트 객체 생성
		PreparedStatement pstmt = conn.prepareStatement(sql);
		
		// excuteQuery → ResultSet
//		ResultSet rs = stmt.executeQuery(sql);
		ResultSet rs = pstmt.executeQuery();
		
		
		// while(rs.next())
		// rs.getString("컬럼명")
		
		while(rs.next())
		{
			// DTO 객체 생성
			MemberDTO dto = new MemberDTO();
			
			// 객체에 속성값 담기
			dto.setSid(rs.getString("SID"));
			dto.setName(rs.getString("NAME"));
			dto.setTel(rs.getString("TEL"));
			
			// ArrayList에 추가
			memList.add(dto);
			
		}
		
//		stmt.close();
		rs.close();
		pstmt.close();
		
		return memList;
	}

	//********************************************************
	// 전체 인원 수 확인이므로, 
	// 조건이 걸려있지 않기 때문에 매개변수를 전달하지 않는다.
	//********************************************************
	
	// 전체 인원 수 확인을 위한 메소드 정의
	public int count() throws SQLException
	{
		// 인원 수를 저장할 변수 선언
		int count = 0;

		// 쿼리문 준비
		String sql = "SELECT COUNT(*) AS COUNT FROM TBL_MEMBER";
		
		// 스테이트먼트 객체 생성
//		Statement stmt = conn.createStatement();
		// 프리페어드 스테이트먼트 객체 생성
		PreparedStatement pstmt = conn.prepareStatement(sql);
		
		// executeQuery → 단일값 (ResultSet)
		
//		ResultSet rs = stmt.executeQuery(sql);
		ResultSet rs = pstmt.executeQuery();
		
		//*******************************************
		// if (rs.next()) 도 가능! 단일 값이므로.
		//*******************************************
		while(rs.next())
		{
			count = rs.getInt("COUNT");
		}
		
		rs.close();
		pstmt.close();
//		stmt.close();
		
		return count;
	}
	
	// 데이터베이스 연결 종료 담당 메소드 정의
	public void close() throws SQLException
	{
		DBConn.close();
	}
	
}

 

 


 

 

WebApp10_scott.sql

 

SELECT USER
FROM DUAL;
--==>> SCOTT


SELECT *
FROM TAB;

SELECT *
FROM TBL_MEMBER;
/*
1	문정환	010-1111-1111
2	정한울	010-2222-2222
3	최혜인	010-3333-3333
4	길현욱	010-4444-4444
5	ggg	dd
6	김동민	010-7777-7777
7	박나영	010-5555-5555
8	hh	010-3333-3333
9	정현욱	010-9170-1676
11	김민지	010-7777-7777
10	강혜성	010-6380-7047
12	흰둥이	010-2222-2222
*/

DESC TBL_MEMBER;
--==>>
/*
이름   널?       유형           
---- -------- ------------ 
SID  NOT NULL NUMBER       
NAME          VARCHAR2(30) 
TEL           VARCHAR2(40) 

*/

TRUNCATE TABLE TBL_MEMBER;
--==>> Table TBL_MEMBER이(가) 잘렸습니다.


DROP SEQUENCE MEMBERSEQ;
--==>> Sequence MEMBERSEQ이(가) 삭제되었습니다.


CREATE SEQUENCE MEMBERSEQ
NOCACHE;
--==>> Sequence MEMBERSEQ이(가) 생성되었습니다.


INSERT INTO TBL_MEMBER(SID, NAME, TEL) VALUES(MEMBERSEQ.NEXTVAL, '강혜성', '010-1111-1111');
INSERT INTO TBL_MEMBER(SID, NAME, TEL) VALUES(MEMBERSEQ.NEXTVAL, '김동민', '010-2222-2222');
INSERT INTO TBL_MEMBER(SID, NAME, TEL) VALUES(MEMBERSEQ.NEXTVAL, '이주형', '010-3333-3333');
INSERT INTO TBL_MEMBER(SID, NAME, TEL) VALUES(MEMBERSEQ.NEXTVAL, '엄재용', '010-4444-4444');
INSERT INTO TBL_MEMBER(SID, NAME, TEL) VALUES(MEMBERSEQ.NEXTVAL, '김지민', '010-5555-5555')
;
--==>> 1 행 이(가) 삽입되었습니다. * 5


SELECT SID, NAME, TEL
FROM TBL_MEMBER
ORDER BY SID;
--> 한 줄 구성
SELECT SID, NAME, TEL FROM TBL_MEMBER ORDER BY SID
;
--==>>
/*
SID	NAME	    TEL
1	강혜성	010-1111-1111
2	김동민	010-2222-2222
3	이주형	010-3333-3333
4	엄재용	010-4444-4444
5	김지민	010-5555-5555
*/


COMMIT;
--==>> 커밋 완료.


--○ 인원 수 확인 쿼리문 구성

SELECT COUNT(*) AS COUNT
FROM TBL_MEMBER;
--> 한 줄 구성
SELECT COUNT(*) AS COUNT FROM TBL_MEMBER
;
--==>> 5

 

 


 

 

MemberList.jsp

 

<%@page import="com.test.MemberDTO"%>
<%@page import="com.test.MemberDAO"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<% 
	StringBuffer str = new StringBuffer();
	MemberDAO dao = null;
	
	String memberCount = "<span id='memberCount'>전체 회원 수 : "; //5명</span>";

	try
	{
		dao = new MemberDAO();
		
		// dao 메소드에서 반환한 인원수 값을 HTML 형식 문자열에 삽입하기
		memberCount += dao.count() + "명</span>";
		
		str.append("<table class='table'>");
		str.append("<tr><th>번호</th><th>이름</th><th>전화번호</th></tr>");
		
		// MemberDAO 의 lists() 메소드 호출
		//-- 반복문을 통해 <table> 하위 엘리먼트 생성
		for (MemberDTO member : dao.lists())
		{
			str.append("<tr>");
			str.append("<td class='record'>" + member.getSid() + "</td>");
			str.append("<td class='record'>" + member.getName() + "</td>");
			str.append("<td class='record'>" + member.getTel() + "</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());
		}
		
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MemberList.jsp</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
<style type="text/css">
	.record {text-align: center;}
	input {width: 200px; border-radius: 6px;}
	button {width: 320px; height: 40px; font-family: 맑은 고딕; font-weight: bold;}
	.errMsg {font-size: small; color: red; display: none;}
</style>

<script type="text/javascript">
	
	function formCheck()
	{
		// 확인
		//alert("함수 호출~!!!");
		
		var userName = document.getElementById("userName");
		var nameMsg = document.getElementById("nameMsg");
		
		nameMsg.style.display = "none";
		
		if (userName.value=="")
		{
			nameMsg.style.display = "inline";
			userName.focus();
			return false;
		}
		
		
		//return false;
		return true;
	}
	
</script>
</head>
<body>

<div>
	<h1>데이터베이스 연동 회원관리 실습</h1>
	<hr>
</div>

<div>
	<p>DAO, DTO 개념 적용</p>
	<form action="MemberInsert.jsp" method="post" onsubmit="return formCheck();">
		<table class="table">
			<tr>
				<th>이름(*)</th>
				<td>
					<input type="text" id="userName" name="userName" class="txt">
					<span class="errMsg" id="nameMsg">이름을 입력해야 합니다.</span>
				</td>	
			</tr>
			<tr>
				<th>전화번호</th>
				<td>
					<input type="text" id="userTel" name="userTel" class="txt">
				</td>
			</tr>
			<tr></tr>
			<tr>
				<td colspan="2">
					<button type="submit" class="btn" id="btnAdd">회원 추가</button>
				</td>
			</tr>
		</table>
	</form>
</div>
<br><br>
<!-- 
<div>
	<span id="memberCount">전체 회원 수 : 5명</span>
	<table class="table">
		<tr>
			<th>번호</th><th>이름</th><th>전화번호</th>
		</tr>
		<tr>
			<td class="record">1</td>
			<td class="record">고길동</td>
			<td class="record">010-1111-1111</td>
		</tr>
		<tr>
			<td class="record">2</td>
			<td class="record">둘리</td>
			<td class="record">010-2222-2222</td>
		</tr>
		<tr>
			<td class="record">3</td>
			<td class="record">도우너</td>
			<td class="record">010-3333-3333</td>
		</tr>
		<tr>
			<td class="record">4</td>
			<td class="record">희동이</td>
			<td class="record">010-4444-4444</td>
		</tr>
		<tr>
			<td class="record">5</td>
			<td class="record">마이콜</td>
			<td class="record">010-5555-5555</td>
		</tr>
	</table>
</div>
 -->
 
 <div>
 	<!-- 전체 인원 수 확인 -->
 	<%=memberCount %>
 	
 	<!-- 번호 이름 전화번호 항목에 대한 리스트 구성 -->
 	<%=str.toString() %>
 </div>
 
 
 
</body>
</html>

 

 

MemberInsert.jsp

 

<%@page import="com.test.MemberDTO"%>
<%@page import="com.test.MemberDAO"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<% 
	// MemberInsert.jsp
	//-- 데이터 입력 액션 처리 페이지
	
	// 이전 페이지(MemberList.jsp)로부터 넘어온 데이터 수신
	// → userName, userTel
	
	request.setCharacterEncoding("UTF-8");
	//-- 한글 데이터가 깨지지 않도록 인코딩 설정
	
	// 위 코드를 수행한 후 데이터 수신
	String userName =  request.getParameter("userName");
	String userTel = request.getParameter("userTel");
	
	// 밖에서 선언해야 DAO가 보이므로 null 로 선언.
	MemberDAO dao = null;
	
	
	try
	{
		dao = new MemberDAO();
		
		//*******************************************
		// dao 메소드 호출하는 과정에서
		// add 메소드의 매개변수가 MemberDTO 이므로
		// MemberDTO 객체를 먼저 생성해 준다.
		//*******************************************
		
		
		// MemberDTO 구성
		MemberDTO member = new MemberDTO();
		member.setName(userName);
		member.setTel(userTel);
		
		// add 메소드의 내부에서 필요한 값은 NAME, TEL이므로
		// SID = MEMBERSEQ.NEXTVAL 로 채워진 상황이기에 setSid를 하지 않음
		
		// dao 의 add() 메소드 호출 → insert 쿼리문 수행
		dao.add(member);
		
		// 필요하다면 add() 메소드의 반환값을 받아
		// insert 액션이ㅡ 정상 처리여부 확인 후 추가 코드 구성 가능~!!!
		
		
	}
	catch(Exception e)
	{
		System.out.println(e.toString());
	}
	finally
	{
		try
		{
			dao.close();
		}
		catch(Exception e)
		{
			System.out.println(e.toString());
		}
	}
	
	// 이 페이지를 다시 요청하라는 의미로
	// request.sendRedirect()
	
	// URL 주소가 적혀있는 쪽지를 사용자에게 전달
	// → 이 주소를 다시 요청해서 찾아갈 수 있도록 하세요~!!!
	//    (그럼 입력값이 반영된 결과물을 확인할 수 있을거예요~!!!)
	
	response.sendRedirect("MemberList.jsp");
	
	// 아래 보여주는 페이지 모두 삭제~!!!
%>