[구디아카데미][IT국비지원][TIL] 가게 리스트

Seokhyun Jeong·2023년 4월 25일
0

과제

목록 보기
14/19
post-thumbnail

[구디아카데미][IT국비지원]

store 테이블


코드

storeList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page import="java.sql.ResultSet" %>
<%
	// 현재 페이지
	int currentPage = 1; // 기본값 : 1페이지
	if(request.getParameter("currentPage") != null) { // 페이지 요청값을 받아 페이지 변경
		currentPage = Integer.parseInt(request.getParameter("currentPage"));
	}
	// 현재 페이지 디버깅
	System.out.println(currentPage + "<--currentPage");
	// 페이지당 출력 행의 수
	int rowPerPage = 10;
	// 시작 행 번호
	int startRow = 0 + (currentPage-1) * rowPerPage;
	
	// 드라이버 로딩
	Class.forName("org.mariadb.jdbc.Driver");
	// homework0419 db 접속
	Connection conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3306/homework0419", "root", "java1234");
	// store 테이블에서 페이지에서 표시할 데이터를 조회하는 sql 전송
	PreparedStatement stmt = conn.prepareStatement("select store_no, store_name, store_category, store_address, store_emp_cnt, store_begin, createdate, updatedate from store order by store_begin desc limit ?, ?");
	stmt.setInt(1, startRow); // 1번째 ? = startRow
	stmt.setInt(2, rowPerPage);  // 2번째 ? = rowPerPage
	// sql 디버깅
	System.out.println(stmt + " <--stmt");
	// 출력할 store 데이터 (sql 전송한 결과값)
	ResultSet rs = stmt.executeQuery();
	
	//총 행의 수를 구하는 sql 전송
	PreparedStatement stmt2 = conn.prepareStatement("select count(*) from store");
	//총 행의 수의 값
	ResultSet rs2 = stmt2.executeQuery();
	//총 행의 수
	int totalRow = 0;
	if(rs2.next()){
		totalRow = rs2.getInt("count(*)");
	}
	// 마지막 페이지 = 총 행의 수 / 페이지 당 행의 수
	int lastPage = totalRow / rowPerPage;
	// 총 행의 수 / 페이지 당 행의 수 의 나머지가 0이 아니면 마지막 페이지 + 1
	if(totalRow % rowPerPage != 0){
		lastPage = lastPage + 1;
	}
%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>storeList.jsp</title>
	<!-- Latest compiled and minified CSS -->
	<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
	
	<!-- Latest compiled JavaScript -->
	<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
	<div class="container">
		<a href="./storeList.jsp?currentPage=1"><image src="./img/홈.png"></a>
		<a href="./insertStoreForm.jsp"><image src="./img/등록.png"></a>
		<h1>가게 리스트</h1>
		<table class="table table-bordered">
			<tr>
				<th class="table-dark">가게 번호</th>
				<th class="table-dark">가게 이름</th>
				<th class="table-dark">가게 종류</th>
				<th class="table-dark">가게 주소</th>
				<th class="table-dark">가게 직원 수</th>
				<th class="table-dark">개업 날짜</th>
				<th class="table-dark">작성 날짜</th>
				<th class="table-dark">수정 날짜</th>
				<th class="table-dark">수정</th>
				<th class="table-dark">삭제</th>
			</tr>
			<%
				// rs 커서가 가르키는 행이 있을 경우 출력
				while(rs.next()){
			%>
				<tr>
					<td><%=rs.getInt("store_no") %></td>
					<td><%=rs.getString("store_name") %></td>
					<td><%=rs.getString("store_category") %></td>
					<td><%=rs.getString("store_address") %></td>
					<td><%=rs.getInt("store_emp_cnt") %></td>
					<td><%=rs.getString("store_begin") %></td>   
					<td><%=rs.getString("createdate").substring(0, 10) %></td>
					<td><%=rs.getString("updatedate").substring(0, 10) %></td>
					<td align="center"><a href="./updateStoreForm.jsp?storeNo=<%=rs.getInt("store_no") %>&currentPage=<%=currentPage %>"><image src="./img/수정.png"></a></td>
					<td align="center"><a href="./deleteStoreForm.jsp?storeNo=<%=rs.getInt("store_no") %>"><image src="./img/삭제.png"></a></td>
				</tr>
			<%
				}
			%>
		</table>
		<%
				// 페이지가 1보다 클 경우 이전 버튼 활성화
				if(currentPage > 1){
		%>
					<a href="./storeList.jsp?currentPage=<%=currentPage-1%>"><image src="./img/왼쪽화살표.png"></a>	
		<%
				}
		%>
				<span class="h5"><%=currentPage%></span><!-- 현재 페이지 표시 -->
		<%
				// 페이지가 마지막 페이지보다 작을 경우 다음 버튼 활성화
				if(currentPage < lastPage) {
		%>
					<a href="./storeList.jsp?currentPage=<%=currentPage+1%>"><image src="./img/오른쪽화살표.png"></a>
		<%	
				}
		%>
	</div>
</body>
</html>

insertStoreForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>insertStoreForm.jsp</title>
	<!-- Latest compiled and minified CSS -->
	<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
	
	<!-- Latest compiled JavaScript -->
	<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
	<div class="container">
		<a href="./storeList.jsp?currentPage=1"><image src="./img/홈.png"></a>
		<h1>가게 등록 정보</h1>
		<form action="./insertStoreAction.jsp" method="post">
			<table class="table table-bordered">
				<tr>
					<th class="table-dark">가게 이름</th>
					<td><input type="text" name="storeName"></td>
				</tr>
				<tr>
					<th class="table-dark">가게 종류</th>
					<td>
						<input type="radio" name="storeCategory" value="한식">한식
						<input type="radio" name="storeCategory" value="중식">중식
						<input type="radio" name="storeCategory" value="일식">일식
					</td>
				</tr>
				<tr>
					<th class="table-dark">가게 주소</th>
					<td><input type="text" name="storeAddress"></td>
				</tr>
				<tr>
					<th class="table-dark">가게 직원 수</th>
					<td><input type="number" name="storeEmpCnt"></td>
				</tr>
				<tr>
					<th class="table-dark">개업 날짜</th>
					<td><input type="date" name=storeBegin></td>
				</tr>
			</table>
			<button type="submit">입력</button> <button type="reset">취소</button>
		</form>
	</div>
</body>
</html>

insertStoreAction.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.PreparedStatement" %>
<%
	//post방식 인코딩 처리 
	request.setCharacterEncoding("utf-8");	

	// validation(요청 파라미터값 유효성 검사)
	if(request.getParameter("storeName") == null 			// 파라미터가 null일 경우
		|| request.getParameter("storeCategory") == null 
		|| request.getParameter("storeAddress") == null 
		|| request.getParameter("storeEmpCnt") == null 
		|| request.getParameter("storeBegin") == null 
		|| request.getParameter("storeName").equals("")  	// 파라미터가 공백일 경우
		|| request.getParameter("storeCategory").equals("") 
		|| request.getParameter("storeAddress").equals("") 
		|| request.getParameter("storeEmpCnt").equals("")  
		|| request.getParameter("storeBegin").equals("")) { 
		
		response.sendRedirect("./insertStoreForm.jsp");	// 입력 폼으로 가라고 명령
		return;
	}
	
	// 파라미터값 변수에 저장
	String storeName = request.getParameter("storeName");
	String storeCategory = request.getParameter("storeCategory");
	String storeAddress = request.getParameter("storeAddress");
	int storeEmpCnt = Integer.parseInt(request.getParameter("storeEmpCnt"));
	String storeBegin = request.getParameter("storeBegin");
	
	// 드라이버 로딩
	Class.forName("org.mariadb.jdbc.Driver");
	// homework0419 db 접속
	Connection conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3306/homework0419", "root", "java1234");
	// store 테이블에 새로운 데이터를 삽입하는 sql 전송
	String sql = "insert into store(store_name, store_category, store_address, store_emp_cnt, store_begin, createdate, updatedate) values(?,?,?,?,?,now(),now())";
	PreparedStatement stmt = conn.prepareStatement(sql);
	stmt.setString(1, storeName); 		// 1번째 ? = storeName
	stmt.setString(2, storeCategory);  	// 2번째 ? = storeCategory
	stmt.setString(3, storeAddress); 	// 3번째 ? = storeAddress
	stmt.setInt(4, storeEmpCnt);  		// 4번째 ? = storeEmpCnt
	stmt.setString(5, storeBegin);  	// 5번째 ? = storeBegin
	int row = stmt.executeUpdate();		// 디버깅 : 1(ex:2)이면 1행(ex:2행) 입력성공, 0이면 입력된 행이 없다
	// row값을 이용한 디버깅
	System.out.println(row + " <--row");
	// sql 디버깅
	System.out.println(stmt + " <--stmt");
	// redirection
	response.sendRedirect("./storeList.jsp"); // 리스트로 가라고 명령
%>

updateStoreForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page import="java.sql.ResultSet" %>
<%	
	// 요청값 유효성 검사
	if(request.getParameter("storeNo") == null				// 요청값이 null이거나
		|| request.getParameter("storeNo").equals("")) {	// 요청값이 공백이면
		response.sendRedirect("./storeList.jsp");	 		// redirection(storeList.jsp) storeList.jsp을 요청해라
		return;												// 코드는 여기서 종료한다
	}

	// 요청값 변수에 저장
	int storeNo = Integer.parseInt(request.getParameter("storeNo"));
	int currentPage = Integer.parseInt(request.getParameter("currentPage"));
	// 디버깅(요청값 확인)
	System.out.println(storeNo + " <-- updateStoreForm parmeter storeNo");
	System.out.println(currentPage + " <-- updateStoreForm parmeter currentPage");
	
	// 드라이버 로딩
	Class.forName("org.mariadb.jdbc.Driver");
	// homework0419 db 접속
	Connection conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3306/homework0419", "root", "java1234");
	// store 테이블에서 store_no가 storeNo인 데이터를 조회하는 sql 전송
	PreparedStatement stmt = conn.prepareStatement("select store_name, store_category, store_address, store_emp_cnt, store_begin, createdate, updatedate from store where store_no=?");
	stmt.setInt(1, storeNo); // 1번째 ? = storeNo
	// sql 디버깅
	System.out.println(stmt + " <-- updateStoreForm sql");
	// 출력할 store 데이터 (sql 전송한 결과값)
	ResultSet rs = stmt.executeQuery();
%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>updateStoreForm</title>
	<!-- Latest compiled and minified CSS -->
	<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
	
	<!-- Latest compiled JavaScript -->
	<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
	<div class="container">
		<h1>가게 정보 변경</h1>
		<form action="updateStoreAction.jsp" method="post">
			<table class="table table-bordered">
			<%
				// rs 커서가 가르키는 행이 있을 경우 출력
				while(rs.next()){
			%>
					<tr>
						<th class="table-dark">가게 번호</th>
						<td>
							<input type="number" readonly="readonly" name="storeNo" value="<%=storeNo %>">
						</td>
					</tr>
					<tr>
						<th class="table-dark">가게 이름</th>
						<td>
							<input type="text" name="storeName" value="<%=rs.getString("store_name") %>">
						</td>
					</tr>
					<tr>
						<th class="table-dark">가게 종류</th>
						<td>
						<%
							if(rs.getString("store_category").equals("한식")) {
						%>
							<input type="radio" name="storeCategory" value="한식" checked="checked">한식
							<input type="radio" name="storeCategory" value="중식">중식
							<input type="radio" name="storeCategory" value="일식">일식
						<%
							} else if(rs.getString("store_category").equals("중식")) {
						%>
							<input type="radio" name="storeCategory" value="한식">한식
							<input type="radio" name="storeCategory" value="중식" checked="checked">중식
							<input type="radio" name="storeCategory" value="일식">일식
						<%
							} else {
						%>
								<input type="radio" name="storeCategory" value="한식">한식
								<input type="radio" name="storeCategory" value="중식">중식
								<input type="radio" name="storeCategory" value="일식" checked="checked">일식
						<%
							}
						%>
						</td>
					</tr>
					<tr>
						<th class="table-dark">가게 주소</th>
						<td>
							<input type="text" name="storeAddress" value="<%=rs.getString("store_address") %>">
						</td>
					</tr>
					<tr>
						<th class="table-dark">가게 직원 수</th>
						<td>
							<input type="number" name="storeEmpCnt" value="<%=rs.getInt("store_emp_cnt") %>">
						</td>
					</tr>
					<tr>
						<th class="table-dark">개업 날짜</th>
						<td>
							<%=rs.getString("store_begin") %>
						</td>
					</tr>
					<tr>
						<th class="table-dark">작성 날짜</th>
						<td>
							<%=rs.getString("createdate") %>
						</td>
					</tr>
					<tr>
						<th class="table-dark">수정 날짜</th>
						<td>
							<%=rs.getString("updatedate") %>
						</td>
					</tr>
			<%
				}
			%>
			</table>
			<input type="hidden" name="currentPage" value="<%=currentPage %>">
			<button type="submit">수정</button>
		</form>
	</div>
</body>
</html>

updateStoreAction.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.PreparedStatement" %>
<%
	// 요청값 유효성 검사
	if(request.getParameter("storeNo") == null				// 요청값이 null이거나
		|| request.getParameter("storeName") == null
		|| request.getParameter("storeCategory") == null
		|| request.getParameter("storeAddress") == null
		|| request.getParameter("storeEmpCnt") == null
		|| request.getParameter("storeNo").equals("")		// 공백일 때
		|| request.getParameter("storeName").equals("")
		|| request.getParameter("storeCategory").equals("")
		|| request.getParameter("storeAddress").equals("")
		|| request.getParameter("storeEmpCnt").equals("")) {
	
		response.sendRedirect("./storeList.jsp");			// storeList.jsp로 가라
		return;												// 코드는 여기서 종료
	}

	// 요청값 변수에 저장
	int storeNo = Integer.parseInt(request.getParameter("storeNo"));
	String storeName = request.getParameter("storeName");
	String storeCategory = request.getParameter("storeCategory");
	String storeAddress = request.getParameter("storeAddress");
	int storeEmpCnt = Integer.parseInt(request.getParameter("storeEmpCnt"));
	int currentPage = Integer.parseInt(request.getParameter("currentPage"));
	// 디버깅(요청값 확인)
	System.out.println(storeNo + " <-- updateStoreAction parameter storeNo");
	System.out.println(storeName + " <-- updateStoreAction parameter storeName");
	System.out.println(storeCategory + " <-- updateStoreAction parameter storeCategory");
	System.out.println(storeAddress + " <-- updateStoreAction parameter storeAddress");
	System.out.println(storeEmpCnt + " <-- updateStoreAction parameter storeEmpCnt");
	System.out.println(currentPage + " <-- updateStoreAction parameter currentPage");
	
	// 드라이버 로딩
	Class.forName("org.mariadb.jdbc.Driver");
	// homework0419 db 접속
	Connection conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3306/homework0419", "root", "java1234");
	// store 테이블에서 store_no와 store_name이 일치하면 데이터를 수정하는 sql 전송
	PreparedStatement stmt = conn.prepareStatement("update store set store_category=?, store_address=?, store_emp_cnt=?, updatedate=now() where store_no=? and store_name=?");
	stmt.setString(1, storeCategory); 	// 1번째 ? = storeCategory
	stmt.setString(2, storeAddress); 	// 2번째 ? = storeAddress
	stmt.setInt(3, storeEmpCnt); 		// 3번째 ? = storeEmpCnt
	stmt.setInt(4, storeNo); 			// 4번째 ? = storeNo
	stmt.setString(5, storeName); 		// 5번째 ? = storeName
	// sql 디버깅
	System.out.println(stmt + " <-- updateStoreAction sql");
	// sql 실행 시 영향받은 행의 수
	int row = stmt.executeUpdate();
	
	if(row == 0) {																						// 영향받은 행의 수가 0이면(store_name이 달라서 수정되지 않으면)
		response.sendRedirect("./updateStoreForm.jsp?storeNo="+storeNo+"&currentPage="+currentPage);	// 이전 updateStoreForm.jsp가서 storeName을 다시 입력받아라
	} else {																							// 영향받은 행의 수가 0이 아니면(수정되면)
		response.sendRedirect("./storeList.jsp?currentPage="+currentPage);								// 수정된 데이터가 있는 페이지의 storeList.jsp로 가라
	}
%>

deleteStoreForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
	// 요청값 유효성 검사
	if(request.getParameter("storeNo") == null				// 요청값이 null 이거나
		|| request.getParameter("storeNo").equals("") ) {	// 요청값이 공백일 때
		response.sendRedirect("./storeList.jsp");			// storeList.jsp로 가라 명령
		return;												// 코드를 더이상 실행하지 않고 deleteStoreForm.jsp를 빠져나간다				
	}

	// 요청값 변수에 저장
	int storeNo = Integer.parseInt(request.getParameter("storeNo"));
	// 디버깅(요청값 확인)
	System.out.println(storeNo + " <-- deleteStroeForm parameter storeNo");
	
%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>deleteStoreForm.jsp</title>
	<!-- Latest compiled and minified CSS -->
	<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
	
	<!-- Latest compiled JavaScript -->
	<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
	<div class="container">
		<h1>가게 삭제</h1>
		<form action="./deleteStoreAction.jsp" method="post">
			<table class="table table-bordered">
				<tr>
					<td class="table-dark">가게 번호</td>
					<td>
						<input type="text" name="storeNo" value="<%=storeNo %>" readonly="readonly">
					</td>
				</tr>
				<tr>
					<td class="table-dark">가게 이름</td>
					<td><input type="text" name="storeName"></td>
				</tr>
			</table>
			<div>
				<button type="submit">삭제</button>
			</div>
		</form>
	</div>

</body>
</html>

deleteStoreAction.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.PreparedStatement" %>
<%
	// 요청값 유효성 검사
	if(request.getParameter("storeNo") == null				// 파라미터가 null 이거나
		|| request.getParameter("storeName") == null		
		|| request.getParameter("storeNo").equals("")		// 공백일 때
		|| request.getParameter("storeName").equals("")) {
		response.sendRedirect("./storeList.jsp");			// storeList.jsp로 가라 명령
		return;												// 코드를 더이상 실행하지 않고 deleteStoreAcion.jsp를 빠져나간다
	}

	// 요청값 변수에 저장
	int storeNo = Integer.parseInt(request.getParameter("storeNo"));
	String storeName = request.getParameter("storeName");
	// 디버깅(요청값 확인)
	System.out.println(storeNo + " <-- deleteStoreAction parameter storeNo");
	System.out.println(storeName + " <-- deleteStoreAction parameter storeName");
	// 드라이버 로딩
	Class.forName("org.mariadb.jdbc.Driver");
	// db 접속
	Connection conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3306/homework0419", "root", "java1234");
	// sql 전송
	String sql ="delete from store where store_no = ? and store_name = ?"; // store 테이블에 store_no가 ?이고 store_name이 ?인 행을 삭제해라
	PreparedStatement stmt = conn.prepareStatement(sql);
	stmt.setInt(1, storeNo); // 1번째 ? = storeNo
	stmt.setString(2, storeName);  // 2번째 ? = storeName
	// 디버깅(sql 확인)
	System.out.println(stmt + " <--deletestoreAction sql");
	// sql 전송하여 실행 시 영향 받은 행의 수 
	int row = stmt.executeUpdate();
	// 디버깅(영향받은 행의 수 확인)
	System.out.println(row + " <-- deletestoreAction row");
	// 삭제 되었는지 확인 (storeName이 틀렸는지 검사)
	if(row == 0) { 																// sql 전송하여 실행 시 영향 받은 행의 수가 0이면(삭제 X)
		response.sendRedirect("./deleteStoreForm.jsp?noticeNo=" + storeNo); 	// deleteNoticeForm.jsp로 돌아가서 storeName 다시 입력 받기
	} else { 																	// sql 전송하여 실행 시 영향 받은 행의 수가 0아니면(삭제 O)
		response.sendRedirect("./storeList.jsp");								// ./noticeList.jsp로 가기
	}
%>

결과화면

storeList.jsp

insertStoreForm.jsp

updateStoreForm.jsp

deleteStoreForm.jsp

0개의 댓글