[๊ตฌ๋””์•„์นด๋ฐ๋ฏธ IT๊ตญ๋น„์ง€์›] ์ง€๋‚œ ์‹œ๊ฐ„์— ๋ฐฐ์šด ๋‚ด์šฉ์œผ๋กœ ๋‹ค์ด์–ด๋ฆฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ–ˆ๋‹ค.

๐Ÿ’ก home.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" %>
<%
	// select notice_no, notice_title, createdate from notice
	// notice_no๋Š” ์ถœ๋ ฅ๋˜์ง€๋Š” ์•Š์•„๋„ ํ•„์š”ํ•˜๋ฏ€๋กœ ๊ฐ™์ด ๋ถˆ๋Ÿฌ์˜จ๋‹ค!
	// order by createdate desc
	// limit 0, 5
		
	// 1) ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ // mariadb๋ฅผ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๋“œ๋ผ์ด๋ฒ„ ํด๋ž˜์Šค ์œ„์น˜์˜ ํ’€๋„ค์ž„์„ ์ ๋Š”๋‹ค (๊ตณ์ด ์™ธ์šฐ๋ ค๊ณ  ํ•  ํ•„์š”x)
	Class.forName("org.mariadb.jdbc.Driver"); 
		
	// 2) mariadb ์„œ๋ฒ„์— ์ ‘์†, ์ ‘์† ์œ ์ง€
	Connection conn = DriverManager.getConnection(
			"jdbc:mariadb://127.0.0.1:3306/diary","****","****"); // ๋งค๊ฐœ๋ณ€์ˆ˜ 3๊ฐœ (์ฃผ์†Œ,๊ณ„์ •,์•”ํ˜ธ)
		
	// 3) ์ฟผ๋ฆฌ ์ƒ์„ฑ ํ›„ ์‹คํ–‰
	// String sql ๋งŒ๋“ค์–ด์„œ ๋ฏธ๋ฆฌ ์ž‘์„ฑํ•˜๊ณ  ํ•˜๋Š” ๊ฒŒ ๋” ํŽธํ•จ
	PreparedStatement stmt = conn.prepareStatement(
			"select notice_no, notice_title, createdate from notice order by createdate desc limit 0, 5");
	System.out.println(stmt + "<-- stmt"); // ๋””๋ฒ„๊น…
	ResultSet rs = stmt.executeQuery();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<div><!-- ๋ฉ”์ธ๋ฉ”๋‰ด -->
		<a href="./home.jsp">ํ™ˆ์œผ๋กœ</a>
		<a href="./noticeList.jsp">๊ณต์ง€ ๋ฆฌ์ŠคํŠธ</a>
		<a href="./scheduleList.jsp">์ผ์ • ๋ฆฌ์ŠคํŠธ</a>
	</div>
	<h1>๊ณต์ง€์‚ฌํ•ญ</h1><!-- ๋‚ ์งœ์ˆœ ์ตœ๊ทผ ๊ณต์ง€ 5๊ฐœ -->
	<table>
		<tr>
			<th>notice_title</th>
			<th>createdate</th>
		</tr>
		<%
			while(rs.next()) {
		%>
			<tr>
				<td>
					<a href="./noticeOne.jsp?noticeNo=<%=rs.getInt("notice_no")%>">
					<!-- notice_title์˜ ๊ฐ’์€ ์ค‘๋ณต๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ’์€ notice_no์˜ ๊ฐ’์„ ๋„˜๊ธด๋‹ค -->
					<!-- ์ฃผ์†Œ?ํ‚ค=๊ฐ’ -->
						<%=rs.getString("notice_title") %>
					</a>
				</td>
				<td><%=rs.getString("createdate").substring(0, 10) %></td>
				<!-- ์ž๋ฐ”์˜ ๋‚ ์งœํƒ€์ž…๊ณผ ๋˜‘๊ฐ™์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Stringํƒ€์ž…์œผ๋กœ ๋ฐ›๋Š”๋‹ค (์ฐธ์กฐํƒ€์ž…๋ผ๋ฆฌ๋Š” ์ž๋™ํ˜•๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—)-->
				<!-- ์‹œ๊ฐ„์ด ์ œ๋Œ€๋กœ ์ถœ๋ ฅ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— substring ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‚ ์งœ๋ถ€๋ถ„๋งŒ ์ถœ๋ ฅ -->
				<!-- (์‹œ์ž‘ ์ธ๋ฑ์Šค, ๋ ์ธ๋ฑ์Šค) ์‹œ์ž‘ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ~ ๋ ์ธ๋ฑ์Šค ์•ž๊นŒ์ง€ ์ถœ๋ ฅ, ์ธ๋ฑ์Šค์˜ ์‹œ์ž‘์€ 0 -->
			</tr>
		<%
			}
		%>
	</table>
</body>
</html>
  • <a href="./noticeOne.jsp?noticeNo=<%=rs.getInt("notice_no")%>"> : notice_title์˜ ๊ฐ’์€ ์ค‘๋ณต๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—(์œ ์ผํ•œ ํ‚ค๊ฐ’์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์—) notice_no์˜ ๊ฐ’์œผ๋กœ ๋ณด๋‚ธ๋‹ค.
  • rs.getํƒ€์ž… : ํƒ€์ž… ํ‹€๋ฆฌ์ง€ ์•Š๊ฒŒ ์ฃผ์˜ํ•˜๊ธฐ
  • .substring : 6์ผ์ฐจ์— ์‚ฌ์šฉํ•œ ๋ฉ”์„œ๋“œ ๋‹ค์‹œ ์‚ฌ์šฉ, Stringํƒ€์ž…(๋ฌธ์ž์—ด)์—์„œ ์›ํ•˜๋Š” ๊ธ€์ž๋งŒ ๋ฝ‘์„ ์ˆ˜ ์žˆ๋‹ค. ์‹œ์ž‘ ์ธ๋ฑ์Šค๋Š” 0์œผ๋กœ ์‹œ์ž‘, ๋ ์ธ๋ฑ์Šค ๋ฐ”๋กœ ์•ž๊นŒ์ง€๋งŒ ์ถœ๋ ฅํ•œ๋‹ค.
  • order by createdate desc limit 0, 5 : createdate ๋‚ ์งœ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœํ•˜์—ฌ ์ฒซ๋ฒˆ์งธ๋ถ€ํ„ฐ 5๊ฐœ๋งŒ ์กฐํšŒ

๐Ÿ“ ์ถœ๋ ฅ

๋‚ ์งœ์ˆœ์œผ๋กœ 5๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚ด๋ฆผ์ฐจ์ˆœ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’ก noticeOne.jsp

ํ•ด๋‹น ๋ฐ์ดํ„ฐ์˜ ์ œ๋ชฉ(title)์„ ํด๋ฆญํ•˜๋ฉด ์ด๋™๋˜๋Š” ์ƒ์„ธํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

๐Ÿ“ ์ž‘์„ฑ

<%@ 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("noticeNo") == null){
		response.sendRedirect("./noticeList.jsp");
		// ๋‹ค์‹œ ๋Œ์•„๊ฐ€์•ผํ•  ์ฃผ์†Œ๋ฅผ ์•Œ๋ ค์คŒ
		// ํŽ˜์ด์ง€ ๋‹จ์œ„์˜ ํ”„๋กœ๊ทธ๋žจ์ด๋ฏ€๋กœ ๋‚ด๊ฐ€ ์„ค์ •ํ•œ ๋ฃจํŠธ๋Œ€๋กœ ๋„˜์–ด์˜ค์ง€ ์•Š์„์ˆ˜๋„(=noticeNo์˜ ๊ฐ’์ด null์ผ์ˆ˜๋„) ์žˆ๊ธฐ ๋•Œ๋ฌธ์—
		return;
		// 1) ์ฝ”๋“œ์ง„ํ–‰์ข…๋ฃŒ 2) ๋ฐ˜ํ™˜๊ฐ’์„ ๋„˜๊ฒจ์คŒ
	}

	int noticeNo = Integer.parseInt(request.getParameter("noticeNo"));
	// noticeNo์˜ ๊ฐ’ ๊ฐ€์ ธ์™€์„œ intํƒ€์ž…์œผ๋กœ ๋ฐ”๊พธ๊ธฐ
	
	Class.forName("org.mariadb.jdbc.Driver"); 
	Connection conn = DriverManager.getConnection(
			"jdbc:mariadb://127.0.0.1:3306/diary","****","****");
	
	// ์ฟผ๋ฆฌ๋Š” ํ•ด๋‹น ํŽ˜์ด์ง€์— ์‚ฌ์šฉํ•˜๋Š” ์ •๋ณด์— ๋งž๊ฒŒ ๋‹ค์‹œ ์ž‘์„ฑ
	String sql = "select notice_no, notice_title, notice_content, notice_writer, createdate, updatedate from notice where notice_no = ?";
	// String sql = "select * from notice where notice_no = ?";
	// ๋„˜์–ด์˜ค๋Š” notice_no์˜ ๊ฐ’์ด ๊ณ„์† ๋‹ฌ๋ผ์ง€๋ฏ€๋กœ ?๋กœ ์ž…๋ ฅ
	PreparedStatement stmt = conn.prepareStatement(sql);
	stmt.setInt(1, noticeNo);
	// ?๋กœ ์ž…๋ ฅ๋œ notice_no์˜ ๊ฐ’์„ set๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ noticeNo๋กœ ๋ฐ”๊พธ๊ธฐ
	// ์ฒซ๋ฒˆ์งธ ? = 1 // 1๋ถ€ํ„ฐ ์„ผ๋‹ค
	System.out.println(stmt + "<-- stmt"); // ๋””๋ฒ„๊น…
	ResultSet rs = stmt.executeQuery();
	
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<div><!-- ๋ฉ”์ธ๋ฉ”๋‰ด -->
		<a href="./home.jsp">ํ™ˆ์œผ๋กœ</a>
		<a href="./noticeList.jsp">๊ณต์ง€ ๋ฆฌ์ŠคํŠธ</a>
		<a href="./scheduleList.jsp">์ผ์ • ๋ฆฌ์ŠคํŠธ</a>
	</div>
	
	<h1>๊ณต์ง€ ์ƒ์„ธ</h1>
	<%
		if(rs.next()) {
	%>
			<table>
				<tr>
					<td>notice_no</td>
					<td><%=rs.getInt("notice_no")%></td>
				</tr>
				<tr>
					<td>notice_title</td>
					<td><%=rs.getString("notice_title")%></td>
				</tr>
				<tr>
					<td>notice_content</td>
					<td><%=rs.getString("notice_content")%></td>
				</tr>
				<tr>
					<td>notice_writer</td>
					<td><%=rs.getString("notice_writer")%></td>
				</tr>
				<tr>
					<td>createdate</td>
					<td><%=rs.getString("createdate")%></td>
				</tr>
				<tr>
					<td>updatedate</td>
					<td><%=rs.getString("updatedate")%></td>
				</tr>
		</table>
	<%
		}
	%>
</body>
</html>
  • ์›นํ”„๋กœ๊ทธ๋žจ์€ ํŽ˜์ด์ง€ ๋‹จ์œ„์˜ ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. ์ฆ‰, ์ผ์ •ํ•œ ๋ฃจํŠธ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘๊ทผํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ฃผ์†Œ๋งŒ ์žˆ๋‹ค๋ฉด home.jsp๋ฅผ ๊ฑฐ์ณ์„œ noticeOne.jsp๋กœ ์˜ค๋Š” ๊ฒƒ์ด ์•„๋‹Œ(notice_no์˜ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์˜ค๋Š” ๊ฒƒ์ด ์•„๋‹Œ) ๋ฐ”๋กœ noticeOne.jsp๋กœ ์˜ฌ ์ˆ˜๋„ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋•Œ notice_no์˜ ๊ฐ’์€ null์ด ๋˜๋ฏ€๋กœ, if๋ฌธ์„ ์ด์šฉํ•˜์—ฌ home.jsp๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
if(request.getParameter("noticeNo") == null){
		response.sendRedirect("./home.jsp");
		return;
	}

int noticeNo = Integer.parseInt(request.getParameter("noticeNo"));
  • stmt.setInt(1, noticeNo); : ?๋กœ ๋‚จ๊ฒจ๋‘” ๊ฐ’์€ set์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 1=์ฒซ๋ฒˆ์งธ ๋ฌผ์Œํ‘œ, 2=๋‘๋ฒˆ์งธ ๋ฌผ์Œํ‘œ. ๋‹จ, intํƒ€์ž…์œผ๋กœ ์ง€์ •ํ–ˆ์œผ๋ฏ€๋กœ ?์— ๋“ค์–ด๊ฐˆ ๊ฐ’์€ intํƒ€์ž…๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

๐Ÿ“ ์ถœ๋ ฅ


๐Ÿ’ก noticeList.jsp

500๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ 10๊ฐœ์”ฉ ์ถœ๋ ฅํ•˜๋Š” ๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. ์ด์ „๊ณผ ๋‹ค์Œ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๋ชฉ๋ก์„ ์˜ค๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ธฐ๋Šฅ๋„ ๋”ํ–ˆ๋‹ค.

๐Ÿ“ ์ž‘์„ฑ

<%@ 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) { // ์ฆ‰, ์ด์ „ or ๋‹ค์Œ์„ ๋ˆŒ๋ €์„ ๊ฒฝ์šฐ
		currentPage = Integer.parseInt(request.getParameter("currentPage"));
	}
	System.out.println(currentPage + "<-- currentPage"); // ๋””๋ฒ„๊น…
	
	// ํŽ˜์ด์ง€๋‹น ์ถœ๋ ฅํ•  ํ–‰์˜ ์ˆ˜
	int rowPerPage = 10; // ๊ณต์ง€๋ฅผ ๋ช‡๊ฐœ์”ฉ ์ถœ๋ ฅํ• ์ง€
	
	// ์‹œ์ž‘ ํ–‰ ๋ฒˆํ˜ธ
	int startRow = (currentPage-1)*rowPerPage; 
	/*
	currentPage		startRow(rowPerPage 10์ผ๋•Œ)	
	1				0	<-- (currentPage-1)*rowPerPage
	2				10
	3				20
	4				30
	*/
	// int startRow = 0; // 1ํŽ˜์ด์ง€ ์ผ๋•Œ๋Š” 0์œผ๋กœ ์‹œ์ž‘
	
	
	// DB์—ฐ๊ฒฐ ์„ค์ •
	// select notice_no, notice_title, createdate from notice
	// order by createdate desc
	// limit ?, ?
	// ๊ฐ’์€ ํŽ˜์ด์ง€๋งˆ๋‹ค ๊ณ„์† ๋ฐ”๋€” ๊ฒƒ์ด๋ฏ€๋กœ ?๋กœ ๋‘”๋‹ค
				
	// 1) ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ
	Class.forName("org.mariadb.jdbc.Driver"); 
		
	// 2) mariadb ์„œ๋ฒ„์— ์ ‘์†, ์ ‘์† ์œ ์ง€
	Connection conn = DriverManager.getConnection(
			"jdbc:mariadb://127.0.0.1:3306/diary","****","****");
		
	// 3) ์ฟผ๋ฆฌ ์ƒ์„ฑ ํ›„ ์‹คํ–‰
	PreparedStatement stmt = conn.prepareStatement(
			"select notice_no, notice_title, createdate from notice order by createdate desc limit ?, ?");
	
	stmt.setInt(1, startRow);
	stmt.setInt(2, rowPerPage); 
	System.out.println(stmt + "<-- stmt"); // ๋””๋ฒ„๊น…
	
	// ์ถœ๋ ฅํ•  ๊ณต์ง€ ๋ฐ์ดํ„ฐ
	ResultSet rs = stmt.executeQuery();
	
	// ๋ฐ์ดํ„ฐ ์ด ๊ฐฏ์ˆ˜
	// select count(*) from notice
	PreparedStatement stmt2 = conn.prepareStatement("select count(*) from notice");
	ResultSet rs2 = stmt2.executeQuery();
	int totalRow = 0;
	if(rs2.next()) {
		totalRow = rs2.getInt("count(*)");
	}
	
	// ๋งˆ์ง€๋ง‰ ํŽ˜์ด์ง€
	int lastPage = totalRow / rowPerPage;
	if(totalRow % rowPerPage != 0) { // ํŽ˜์ด์ง€๊ฐ€ ๋”ฑ ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€์ง€ ์•Š์œผ๋ฉด ํ•œํŽ˜์ด์ง€๊ฐ€ ๋” ํ•„์š”ํ•˜๋‹ค
		lastPage = lastPage + 1;
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<div><!-- ๋ฉ”์ธ๋ฉ”๋‰ด -->
		<a href="./home.jsp">ํ™ˆ์œผ๋กœ</a>
		<a href="./noticeList.jsp">๊ณต์ง€ ๋ฆฌ์ŠคํŠธ</a>
		<a href="./scheduleList.jsp">์ผ์ • ๋ฆฌ์ŠคํŠธ</a>
	</div>
	<h1>๊ณต์ง€์‚ฌํ•ญ ๋ฆฌ์ŠคํŠธ</h1>
	<table>
		<tr>
			<th>notice_title</th>
			<th>createdate</th>
		</tr>
		<%
			while(rs.next()) {
		%>
			<tr>
				<td>
					<a href="./noticeOne.jsp?noticeNo=<%=rs.getInt("notice_no")%>">
						<%=rs.getString("notice_title") %>
					</a>
				</td>
				<td><%=rs.getString("createdate").substring(0, 10) %></td>
			</tr>
		<%
			}
		%>
	</table>
	
	<%
		if(currentPage > 1) { // ์ด์ „์€ 1ํŽ˜์ด์ง€์—์„œ๋Š” ์ถœ๋ ฅ๋˜๋ฉด ์•ˆ๋œ๋‹ค
	%>
			<a href="./noticeList.jsp?currentPage=<%=currentPage-1%>">์ด์ „</a>
	<%
		}
 	%>
		<%=currentPage%> <!-- ํ˜„์žฌํŽ˜์ด์ง€ -->
	<%
		if(currentPage < lastPage) { // ๋งˆ์ง€๋ง‰ ํŽ˜์ด์ง€์—์„œ๋Š” ๋‹ค์Œ์ด ์ด๋ ฅ๋˜๋ฉด ์•ˆ๋œ๋‹ค
	%>
			<a href="./noticeList.jsp?currentPage=<%=currentPage+1%>">๋‹ค์Œ</a>
	<%
		}
	%>
</body>
</html>

๊ฐ€์žฅ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋ณต์žกํ–ˆ๋‹ค. ์ ˆ๋Œ€ ์™ธ์šฐ๋ ค๊ณ ๋งŒ ํ•˜๋ฉด ์•ˆ๋œ๋‹ค. ์ฐจ๊ทผ์ฐจ๊ทผ ์ฝ์–ด๋ณด๋ฉด์„œ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•จ์„ ๋Š๊ผˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ณด๊ธฐ๋งŒ ํ•ด์„œ๋„ ์•ˆ๋œ๋‹ค. ์ง์ ‘ ๋‚ด๊ฐ€ ์ณ๋ณด๋ฉด์„œ ์ฐจ๊ทผ์ฐจ๊ทผ ์ดํ•ดํ•ด์•ผ ๋‚ด ๊ฒƒ์ด ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

  • int rowPerPage = 10; : ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ 10์œผ๋กœ ๋‘˜ ์ˆ˜๋„ ์žˆ์œผ๋‚˜ ์ฝ”๋“œ๋Š” ํ•ญ์ƒ ์ˆ˜์ •์ด ์šฉ์ดํ•ด์•ผํ•œ๋‹ค. ์ถ”ํ›„ 10ํŽ˜์ด์ง€์”ฉ์ด ์•„๋‹ˆ๋ผ 15ํŽ˜์ด์ง€์”ฉ ํ˜น์€ 5ํŽ˜์ด์ง€์”ฉ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ฝ”๋“œ ์ „์ฒด๊ฐ€ ์•„๋‹Œ ์ด ๋ณ€์ˆ˜๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋  ๊ฒƒ์ด๋‹ค.
  • int startRow = (currentPage-1)*rowPerPage; : ์ด๋Ÿฐ ๊ฒƒ์€ ์ •๋‹ต์ด ์กด์žฌํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์ง์ ‘ ๊ธฐ์ž…ํ•ด๋ณด๋ฉด์„œ ํŒจํ„ด์„ ์ฐพ์œผ๋ฉด ์‹์„ ์™„์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
  • select count(*) from notice : ๋ชจ๋“  ๋ฐ์ดํ„ฐ์˜ ์ˆ˜๋ฅผ ์กฐํšŒํ•œ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ด ๊ฐฏ์ˆ˜๊ฐ€ 500๊ฐœ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ, ์ด๋˜ํ•œ ๋ฐ์ดํ„ฐ์˜ ์ด ๊ฐฏ์ˆ˜๋Š” ์ถ”ํ›„ ๋Š˜์–ด๋‚ ์ˆ˜๋„ ์žˆ๋Š” ๊ฒƒ์ด๊ณ  ์‚ญ์ œ๋  ์ˆ˜๋„ ์žˆ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— 500์ด๋ผ๋Š” ์ˆซ์ž๋กœ ๋‘๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ด๋ ‡๊ฒŒ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‹์„ ์ž‘์„ฑํ•œ๋‹ค.
int totalRow = 0;
	if(rs2.next()) {
		totalRow = rs2.getInt("count(*)");
	}
  • int lastPage = totalRow / rowPerPage; ๋กœ๋งŒ ์ž‘์„ฑํ•  ๊ฒฝ์šฐ ์ด ๋ฐ์ดํ„ฐ์˜ ๊ฐฏ์ˆ˜์™€ ํ•œ ํŽ˜์ด์ง€๋‹น ํ‘œ์‹œํ•  ๋ฐ์ดํ„ฐ์˜ ์ˆ˜๊ฐ€ ๋”ฑ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€์ง€์•Š์„ ๊ฒฝ์šฐ ๋งˆ์ง€๋ง‰ ํŽ˜์ด์ง€ 1๊ฐœ๋Š” ๋ˆ„๋ฝ๋  ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ if๋ฌธ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
if(totalRow % rowPerPage != 0) { // ํŽ˜์ด์ง€๊ฐ€ ๋”ฑ ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€์ง€ ์•Š์œผ๋ฉด ํ•œํŽ˜์ด์ง€๊ฐ€ ๋” ํ•„์š”ํ•˜๋‹ค
		lastPage = lastPage + 1;
	}

๐Ÿ“ ๊ฒฐ๊ณผ


์ฒซํŽ˜์ด์ง€์—์„  ์ด์ „์ด ๋‚˜์˜ค์ง€ ์•Š๊ณ , ๋งˆ์ง€๋ง‰ํŽ˜์ด์ง€์—์„  ๋‹ค์Œ์ด ๋‚˜์˜ค์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’ก ๊ณผ์ œ

์˜ค๋Š˜ ํ•œ ์ˆ˜์—…์„ ํ† ๋Œ€๋กœ ์ด๋ฒˆ์—” ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ง์ ‘ ํ•ด๋ณด๋Š” ๊ณผ์ œ๋ฅผ ์ฃผ์…จ๋‹ค. ์ƒ˜ํ”Œ๋ฐ์ดํ„ฐ ์ž‘์„ฑ๋ถ€ํ„ฐ, ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ” ์ƒ์„ฑ, ์ดํด๋ฆฝ์Šค๋กœ ์—ฐ๊ฒฐํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ๊นŒ์ง€ ์ฐจ๊ทผ์ฐจ๊ทผ ํ•ด๋ณด์•˜๋‹ค.

๐Ÿ“Œ ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ” ์ƒ์„ฑ



๐Ÿ“Œ ์ƒ˜ํ”Œ๋ฐ์ดํ„ฐ ์ž‘์„ฑ



๐Ÿ“Œ ๋“œ๋ผ์ด๋ฒ„



๐Ÿ“Œ ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ


โœ” storeHome.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" %>
<%
	//๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ
	Class.forName("org.mariadb.jdbc.Driver");
	System.out.println("๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ ์„ฑ๊ณต");
	
	// mariadb ์„œ๋ฒ„ ์ ‘์†
	Connection conn = DriverManager.getConnection(
		"jdbc:mariadb://127.0.0.1:3306/homework0419","****","****");
	System.out.println("์ ‘์†์„ฑ๊ณต: "+conn);
	
	// ์ฟผ๋ฆฌ ์ƒ์„ฑ // store_no๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ
	String sql =
			"select store_no, store_name, store_category, store_address from store order by store_no desc limit 0, 5";
	PreparedStatement stmt = conn.prepareStatement(sql);
	System.out.println("ํ˜„์žฌ์ถœ๋ ฅ์ฟผ๋ฆฌ: " + stmt);
	
	// ์ฟผ๋ฆฌ ์‹คํ–‰
	ResultSet rs = stmt.executeQuery();
	System.out.println("์ฟผ๋ฆฌ์‹คํ–‰์„ฑ๊ณต: "+rs);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>storeHome.jsp</title>
<style>
	.center {text-align: center;}
</style>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
	<div class="center"><!-- ๋ฉ”์ธ๋ฉ”๋‰ด -->
		<a href="./storeHome.jsp">ํ™ˆ์œผ๋กœ</a>
		<a href="./storeList.jsp">๋ฆฌ์ŠคํŠธ๋กœ</a>
	</div>
	<h1 class="center">Welcome&#127869;</h1>
	<div class="container mt-3">
	<table class="table">
		<thead class="table-dark">
			<tr>
				<th>์‹๋‹น์ด๋ฆ„</th>
				<th>์นดํ…Œ๊ณ ๋ฆฌ</th>
				<th>์ฃผ์†Œ</th>
			</tr>
		</thead>
		<tbody>
			<%
				while(rs.next()) {
			%>
					<tr>
						<td>
							<a href="./storeOne.jsp?storeNo=<%=rs.getInt("store_no")%>">
								<%=rs.getString("store_name")%>
							</a>
						</td>
						<td><%=rs.getString("store_category")%></td>
						<td><%=rs.getString("store_address")%></td>
					</tr>	
			<%
				}
			%>
		</tbody>
	</table>
</body>
</html>

๐Ÿ“ ์ถœ๋ ฅ


โœ” storeOne.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" %>
<%
	// ์š”์ฒญ๊ฐ’ ์ฒ˜๋ฆฌ
	// null์ผ ๊ฒฝ์šฐ
	if(request.getParameter("storeNo") == null) {
		response.sendRedirect("./storeList.jsp");
		// ๋‹ค์‹œ ๋Œ์•„๊ฐ€์•ผํ•  ์ฃผ์†Œ ์•Œ๋ ค์ฃผ๊ธฐ
		// ํŽ˜์ด์ง€ ๋‹จ์œ„์˜ ํ”„๋กœ๊ทธ๋žจ์ด๋ฏ€๋กœ ๋‚ด๊ฐ€ ์„ค์ •ํ•œ ๋ฃจํŠธ๋Œ€๋กœ ๋„˜์–ด์˜ค์ง€ ์•Š์„์ˆ˜๋„(=storeNo์˜ ๊ฐ’์ด null์ผ์ˆ˜๋„) ์žˆ๊ธฐ ๋•Œ๋ฌธ์—
		return;
	}
	// null์ด ์•„๋‹ ๊ฒฝ์šฐ
	int storeNo = Integer.parseInt(request.getParameter("storeNo"));
	
	//๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ
	Class.forName("org.mariadb.jdbc.Driver");
	System.out.println("๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ ์„ฑ๊ณต");
	
	// mariadb ์„œ๋ฒ„ ์ ‘์†
	Connection conn = DriverManager.getConnection(
		"jdbc:mariadb://127.0.0.1:3306/homework0419","****","****");
	System.out.println("์ ‘์†์„ฑ๊ณต: "+conn);
	
	// ์ฟผ๋ฆฌ ์ƒ์„ฑ // ๋ชจ๋“  ์ •๋ณด ์กฐํšŒ, store_no ๊ฐ’์€ ํด๋ฆญํ•˜๋Š” ๊ฒƒ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง
	PreparedStatement stmt = conn.prepareStatement(
			"select * from store where store_no = ?");
	stmt.setInt(1, storeNo);
	System.out.println("ํ˜„์žฌ์ถœ๋ ฅ์ฟผ๋ฆฌ: " + stmt);
	
	// ์ฟผ๋ฆฌ ์‹คํ–‰
	ResultSet rs = stmt.executeQuery();
	System.out.println("์ฟผ๋ฆฌ์‹คํ–‰์„ฑ๊ณต: "+rs);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>storeOne.jsp</title>
<style>
    .center {text-align: center;}
</style>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
	<div class="center"><!-- ๋ฉ”์ธ๋ฉ”๋‰ด -->
		<a href="./storeHome.jsp">ํ™ˆ์œผ๋กœ</a>
		<a href="./storeList.jsp">๋ฆฌ์ŠคํŠธ๋กœ</a>
	</div>
	<h1 class="center">์‹๋‹น ์ƒ์„ธ&#127869;</h1>
	<div class="container mt-3">
		<%
			if(rs.next()) {
		%>
				<table class="table table-bordered">
					<tr>
						<td>๊ธ€๋ฒˆํ˜ธ</td>
						<td><%=rs.getInt("store_no")%></td>
					</tr>
					<tr>
						<td>์‹๋‹น์ด๋ฆ„</td>
						<td><%=rs.getString("store_name")%></td>
					</tr>
					<tr>
						<td>์นดํ…Œ๊ณ ๋ฆฌ</td>
						<td><%=rs.getString("store_category")%></td>
					</tr>
					<tr>
						<td>์ฃผ์†Œ</td>
						<td><%=rs.getString("store_address")%></td>
					</tr>
					<tr>
						<td>์ ์›์ˆ˜</td>
						<td><%=rs.getInt("store_emp_cnt")%>๋ช…</td>
					</tr>
					<tr>
						<td>๊ธ€์ƒ์„ฑ์ผ์ž</td>
						<td><%=rs.getString("createdate").substring(0, 10)%></td>
					</tr>
					<tr>
						<td>๊ธ€์ˆ˜์ •์ผ์ž</td>
						<td><%=rs.getString("updatedate").substring(0, 10)%></td>
					</tr>
			</table>
		<%
			}
		%>
	</div>
</body>
</html>

๐Ÿ“ ์ถœ๋ ฅ


โœ” 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);
	
	// ํŽ˜์ด์ง€ ๋‹น ์ถœ๋ ฅํ•  ์‹๋‹น ๋ฆฌ์ŠคํŠธ ์ˆ˜
	int rowPerPage = 10; // 10๊ฐœ์”ฉ ์ถœ๋ ฅ
	
	// limit ์‹œ์ž‘ ์ธ๋ฑ์Šค
	int startRow = (currentPage - 1) * rowPerPage;
	
	// ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ
	Class.forName("org.mariadb.jdbc.Driver");
	System.out.println("๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ ์„ฑ๊ณต");
	
	// mariadb ์„œ๋ฒ„ ์ ‘์†
	Connection conn = DriverManager.getConnection(
		"jdbc:mariadb://127.0.0.1:3306/homework0419","****","****");
	System.out.println("์ ‘์†์„ฑ๊ณต: "+conn);
	
	// ์ฟผ๋ฆฌ ์ƒ์„ฑ // store_no๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ
	String sql =
		"select store_no, store_name, store_category, store_address, store_begin from store order by store_no desc limit ?, ?";
	PreparedStatement stmt = conn.prepareStatement(sql);
	// limit ?์— set
	stmt.setInt(1, startRow);
	stmt.setInt(2, rowPerPage);
	System.out.println("ํ˜„์žฌ์ถœ๋ ฅ์ฟผ๋ฆฌ: " + stmt);
	
	// ์ฟผ๋ฆฌ ์‹คํ–‰
	ResultSet rs = stmt.executeQuery();
	System.out.println("์ฟผ๋ฆฌ์‹คํ–‰์„ฑ๊ณต: "+rs);
	
	// ์ „์ฒด ๋ฐ์ดํ„ฐ ์กฐํšŒ
	PreparedStatement stmt2 = conn.prepareStatement(
			"select count(*) from store");
	System.out.println("์ „์ฒด์กฐํšŒ์ฟผ๋ฆฌ: " + stmt2);
	ResultSet rs2 = stmt2.executeQuery();
	System.out.println("์ฟผ๋ฆฌ์‹คํ–‰์„ฑ๊ณต: "+rs2);
	// ์ „์ฒด ๋ฐ์ดํ„ฐ ์ˆ˜ ๊ตฌํ•˜๊ธฐ
	int totalRow = 0;
	if(rs2.next()) {
		totalRow = rs2.getInt("count(*)");
	}
	
	// ๋งˆ์ง€๋ง‰ ํŽ˜์ด์ง€ ๋„˜๋ฒ„
	int lastPage = totalRow / rowPerPage;
	if(totalRow % rowPerPage != 0) { 
		lastPage = lastPage + 1;
		// ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€์ง€ ์•Š์œผ๋ฉด, ๊ฝ‰ ์ฑ„์›Œ์ง€์ง€ ์•Š์€ ๋งˆ์ง€๋ง‰ ํŽ˜์ด์ง€ ๋ฐœ์ƒ
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>storeList.jsp</title>
<style>
	.center {text-align: center;}
</style>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
	<div class="center"><!-- ๋ฉ”์ธ๋ฉ”๋‰ด -->
		<a href="./storeHome.jsp">ํ™ˆ์œผ๋กœ</a>
		<a href="./storeList.jsp">๋ฆฌ์ŠคํŠธ๋กœ</a>
	</div>
	<h1 class="center">์‹๋‹น ๋ฆฌ์ŠคํŠธ&#127869;</h1>
	<div class="container mt-3">
	<table class="table">
		<thead class="table-dark">
			<tr>
				<th>์‹๋‹น์ด๋ฆ„</th>
				<th>์นดํ…Œ๊ณ ๋ฆฌ</th>
				<th>์ฃผ์†Œ</th>
				<th>๊ฐœ์—…์ผ์ž</th>
			</tr>
		</thead>
		<tbody>
			<%
				while(rs.next()) {
			%>
					<tr>
						<td>
							<a href="./storeOne.jsp?storeNo=<%=rs.getInt("store_no")%>">
								<%=rs.getString("store_name")%>
							</a>
						</td>
						<td><%=rs.getString("store_category")%></td>
						<td><%=rs.getString("store_address")%></td>
						<td><%=rs.getString("store_begin")%></td>
					</tr>	
			<%
				}
			%>
		</tbody>
	</table>
	</div>
	<div class="center">
	<%
		if(currentPage > 1) { // ์ฒซ ํŽ˜์ด์ง€์—์„œ๋Š” ์ด์ „์ด ์ถœ๋ ฅ๋˜๋ฉด ์•ˆ๋œ๋‹ค
	%>
			<a href="./storeList.jsp?currentPage=<%=currentPage - 1%>">์ด์ „</a>
	<%
		}
	%>
		<%=currentPage%>ํŽ˜์ด์ง€<!-- ํ˜„์žฌํŽ˜์ด์ง€ -->
	<%
		if(currentPage < lastPage) { // ๋งˆ์ง€๋ง‰ ํŽ˜์ด์ง€์—์„œ๋Š” ๋‹ค์Œ์ด ์ถœ๋ ฅ๋˜๋ฉด ์•ˆ๋œ๋‹ค
	%>
			<a href="./storeList.jsp?currentPage=<%=currentPage + 1%>">๋‹ค์Œ</a>
	<%
		}
	%>
	</div>
</body>
</html>

๐Ÿ“ ์ถœ๋ ฅ


๐Ÿง ํ•˜๋ฃจ๋ฅผ ๋งˆ์น˜๋ฉฐ

์–ด์ œ๋ณด๋‹ค ์˜ค๋Š˜ mariadb๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋” ๊ฐ€๊นŒ์›Œ์ง„ ๊ธฐ๋ถ„์ด ๋“ค์—ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ๊ณผ์ œ๋Š” ์˜ค๋Š˜ ๋ฐฐ์šด ๋‚ด์šฉ์„ ํ† ๋Œ€๋กœ ๋‹ค์‹œ ๋ณต์Šตํ•˜๋Š” ๋Š๋‚Œ์œผ๋กœ ์ฐจ๊ทผ์ฐจ๊ทผ ํ•ด๋ณด๋‹ˆ ํ™•์‹คํžˆ ๊ธฐ์–ต์— ๋” ์˜ค๋ž˜ ๋‚จ์•˜๋‹ค. ๋‚ด๊ฐ€ ์›ํ•˜๋Š”๋Œ€๋กœ ํ•˜๋‚˜์”ฉ ํ•˜๋‚˜์”ฉ ๊ตฌํ˜„๋˜๋Š” ๊ธฐ๋ถ„์ด ์ •๋ง ์ข‹์•˜๋‹ค!๐Ÿ˜Š


profile
ํ•˜๋ฃจ ํ•œ๊ฑธ์Œ์”ฉ๐Ÿ’ช ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž ๋„์ „๊ธฐ ๐ŸŒฑ๐Ÿ’ป

0๊ฐœ์˜ ๋Œ“๊ธ€