[๊ตฌ๋””์•„์นด๋ฐ๋ฏธ IT๊ตญ๋น„์ง€์›] ์ผ์ •๋ฆฌ์ŠคํŠธ, ์ผ์ •์ถ”๊ฐ€, ์ผ์ •์ˆ˜์ •, ์ผ์ •์‚ญ์ œ, ์ผ์ •์กฐํšŒ(๋‹ฌ๋ ฅ) ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค. 15์ผ์ฐจ๋Š” ๋‹ฌ๋ ฅ์กฐํšŒ ์‹œ ๊ฐ ์ผ๋งˆ๋‹ค ์ผ์ •์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ณ , Result Set์œผ๋กœ ์ถœ๋ ฅํ•œ ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ ์ผ๋ฐ˜์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ถ€ํŠธ์ŠคํŠธ๋žฉ5์œผ๋กœ ์ตœ์ข…์ ์œผ๋กœ CSS๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•˜์—ฌ ๋‹ค์ด์–ด๋ฆฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์™„์„ฑํ–ˆ๋‹ค.


๐Ÿ’ก 14~15์ผ์ฐจ

๐Ÿ“Œ ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”(schedule) ์ถ”๊ฐ€


์ผ์ •(schedule)๊ธฐ๋Šฅ ์ถ”๊ฐ€๋ฅผ ์œ„ํ•ด ์ƒ˜ํ”Œ๋ฐ์ดํ„ฐ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ schedule ํ…Œ์ด๋ธ”์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

๐Ÿ“Œ home.jsp (์ถ”๊ฐ€)

home.jsp์— ์˜ค๋Š˜์˜ ์ผ์ •์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

๐Ÿ“ ์ถ”๊ฐ€์ž‘์„ฑ (1)

// ์˜ค๋Š˜ ์ผ์ • (์˜ค๋ฆ„์ฐจ์ˆœ)
	String sql2 = "SELECT schedule_no scheduleNo, schedule_date scheduleDate, schedule_time scheduleTime, substr(schedule_memo,1,5) scheduleMemo, schedule_color scheduleColor FROM schedule WHERE schedule_date = CURDATE() ORDER BY schedule_time ASC";
	PreparedStatement stmt2 = conn.prepareStatement(sql2);
	System.out.println("home stmt2: " + stmt2); // ๋””๋ฒ„๊น…
	
	ResultSet rs2 = stmt2.executeQuery();
	// ResultSet -> ArrayList<Schedule>
	ArrayList<Schedule> scheduleList = new ArrayList<Schedule>();
	while(rs2.next()) {
		Schedule s = new Schedule();
		s.scheduleNo = rs2.getInt("scheduleNo"); // ์ด๋ฆ„์ด ๋ถˆ์ผ์น˜ // sql ์ž‘์„ฑ์‹œ ๋ณ„๋ช…์œผ๋กœ ๋ฐ›์•„์„œ ํ†ต์ผ์‹œ์ผœ์ฃผ๋Š” ๊ฒƒ์ด ์ข‹์Œ
		s.scheduleDate = rs2.getString("scheduleDate"); 
		s.scheduleTime = rs2.getString("scheduleTime");
		s.scheduleMemo = rs2.getString("scheduleMemo"); // ๋ฉ”๋ชจ ์ „์ฒด๊ฐ€ ์•„๋‹Œ ์ผ๋ถ€(5๊ธ€์ž)๋งŒ ๊ฐ€์ ธ์˜ด
		s.scheduleColor = rs2.getString("scheduleColor");
		scheduleList.add(s);
	}
  • substr(schedule_memo,1,10) : ๋ฌธ์ž์—ด์˜ ์ผ๋ถ€๋งŒ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ, ์ž๋ฐ”์—์„œ substring ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋˜์ง€๋งŒ, ๋งˆ๋ฆฌ์•„db์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ๋ถ€ํ„ฐ ์ผ๋ถ€๋งŒ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

    substr(์นผ๋Ÿผ๋ช…, ์‹œ์ž‘์ธ๋ฑ์Šค, ์ถ”์ถœํ• ๋ฌธ์ž์ˆ˜) : ์ธ๋ฑ์Šค๋Š” 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฉฐ (๊ณต๋ฐฑํฌํ•จ) ํ•ด๋‹น ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ๋ช‡๊ฐœ๋ฅผ ์ถ”์ถœํ• ์ง€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.
    ex) ๋งŒ์•ฝ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ABCD EFGH ์ผ ๊ฒฝ์šฐ (schedule_memo,3,4) ์ด๋ฉด "CD E"๊ฐ€ ์ถ”์ถœ๋œ๋‹ค. ์ถ”์ถœํ•  ๋ฌธ์ž์ˆ˜๊ฐ€ ์ƒ๋žต๋˜๋ฉด ํ•ด๋‹น ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ „๋ถ€ ์ถœ๋ ฅ๋œ๋‹ค.

  • YEAR(schedule_date) : ๋˜ํ•œ, ์ด๋Ÿฐ์‹์œผ๋กœ ์ž‘์„ฑํ•˜๋ฉด ํ•ด๋‹น ๋‚ ์งœ ๋ฐ์ดํ„ฐ์—์„œ ๋…„๋„๋งŒ ์ถ”์ถœ๊ฐ€๋Šฅํ•˜๋‹ค. ์ž๋ฐ”์—์„œ ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ถ”์ถœํ•  ํ•„์š”์—†์ด ์• ์ดˆ์— ๋งˆ๋ฆฌ์•„db์—์„œ ๋…„๋„๋งŒ ์ถ”์ถœํ•ด์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค! MONTH๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์›”๋งŒ, DATE๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ผ๋งŒ ์ถ”์ถœ๊ฐ€๋Šฅ!

  • โญ ๋ณ„๋ช…(alias) ๊ธฐ๋Šฅ : ๋ณต์žกํ•œ ์นผ๋Ÿผ๋ช…์„ ๊ฐ€์กŒ์„ ๊ฒฝ์šฐ ๋ณ„๋ช… ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ์œ ์šฉํ•˜๋‹ค. SELECT๋กœ ์กฐํšŒ ์‹œ ์นผ๋Ÿผ๋ช… ๋’ค์— AS + ๋ณ„๋ช…์„ ์ž…๋ ฅํ•˜๋ฉด ๊ทธ ํ›„๋ถ€ํ„ฐ๋Š” ๋ณ„๋ช…์œผ๋กœ ํ˜ธ์ถœ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋•Œ, AS๋Š” ๋„์–ด์“ฐ๊ธฐ๋กœ ์ƒ๋žต ๊ฐ€๋Šฅํ•˜๋‹ค!

  • curdate() : now() ์ฒ˜๋Ÿผ ํ˜„์žฌ ๋‚ ์งœ์˜ ๊ฐ’์ด ๋“ค์–ด๊ฐ€๋‚˜, ์‹œ๊ฐ„์€ ๋“ค์–ด๊ฐ€์ง€ ์•Š๋Š”๋‹ค.

  • ResultSet์„ ArrayList๋กœ ๋ฐ”๊พผ ๊ฒƒ์— ๋Œ€ํ•ด์„œ๋Š” ๋ฐ‘์—์„œ ๋” ์ž์„ธํžˆ!

๐Ÿ“ ์ถ”๊ฐ€์ž‘์„ฑ (2)

<h1> &#x1F49B; ์˜ค๋Š˜์˜ ์ผ์ • &#x1F33B; </h1>
	<table class="table">
		<thead class="table-warning h5 krFont">
			<tr>
				<th>๋‚ ์งœ</th>
				<th>์‹œ๊ฐ„</th>
				<th>์ผ์ •๋ฉ”๋ชจ</th>
			</tr>
		</thead>
		<tbody>
			<%
				for(Schedule s : scheduleList) {
			%>
				<tr>
					<td>
						<%
							// scheduleDate์—์„œ y,m,d ๊ฐ’ ๋ฐ›๊ธฐ
							String y = s.scheduleDate.substring(0,4);
							int m = Integer.parseInt(s.scheduleDate.substring(5,7)) - 1; // ์ž๋ฐ” API๋Š” 0์›”๋ถ€ํ„ฐ ์‹œ์ž‘
							String d = s.scheduleDate.substring(8);
						%>
						<a class="text-dark" href="./scheduleListByDate.jsp?y=<%=y%>&m=<%=m%>&d=<%=d%>">
							<%=s.scheduleDate%>
						</a>
					</td>
					<td><%=s.scheduleTime.substring(0, 5)%></td>
					<td>
						<!-- ๋ณ„๋ช… ์‚ฌ์šฉ -->
						<div style="color: <%=s.scheduleColor%>">
							<%=s.scheduleMemo%>
						</div>
					</td>
				</tr>
			<%
				}
			%>
		</tbody>
	</table>

โญResultSet ๋ณ€ํ™˜ํ•˜๊ธฐโญ

์ง€๊ธˆ๊นŒ์ง€ ์šฐ๋ฆฌ๋Š” SELECT๋กœ ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•˜์—ฌ ResulSet ํƒ€์ž…์œผ๋กœ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ถˆ๋Ÿฌ์˜จ ๋’ค ์ถœ๋ ฅํ•˜์˜€๋‹ค. ํ•˜์ง€๋งŒ ์ถœ๋ ฅ์‹œ์—๋Š” ResulSet ํƒ€์ž…๋ณด๋‹ค๋Š” ์ผ๋ฐ˜์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์—ฌ๊ธฐ์„œ ์ผ๋ฐ˜์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ ํƒ€์ž…์ด๋ž€, ์ฃผ๋กœ ํด๋ž˜์Šค์™€ ArrayList ๋“ฑ์„ ๋งํ•œ๋‹ค. ResulSet์€ ํ‰๋ฒ”ํ•œ ํƒ€์ž…์ด ์•„๋‹ˆ๋ผ ํŠน์ˆ˜ํ•œ ํƒ€์ž…์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ถ๊ทน์ ์ธ '๋ชจ๋ธ๊ฐ’'์ด ๋  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ž˜์„œ ์ž๋ฐ”์˜ ๊ธฐ๋ณธ api ์ž๋ฃŒ ๊ตฌ์กฐํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•ด์•ผํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

  • ์–ด๋– ํ•œ ํ•˜๋‚˜์˜ ๊ฐ’๋งŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ (ex. count(*)) : ์ž๋ฐ”์˜ ๊ธฐ๋ณธํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐ์ดํ„ฐ์˜ ์ด ๊ฐฏ์ˆ˜๊ฐ€ ํ•„์š”ํ•  ๊ฒฝ์šฐ count(*)๋กœ ๋ฐ์ดํ„ฐ์˜ ์ˆ˜๋ฅผ ์นด์šดํŠธํ•œ ํ›„ intํƒ€์ž…์˜ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜์—ฌ ๊ทธ ์•ˆ์— ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.

๐Ÿ“ ๋ณ€ํ™˜์‹œ

// ๋ฐ์ดํ„ฐ ์ด ๊ฐฏ์ˆ˜
	// 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(*)"); // ์ด ResultSet์€ ๊ตณ์ด ๋ฐ”๊ฟ€ ํ•„์š” ์—†์Œ // ์ด๋ฏธ intํƒ€์ž…์ธ totalRow๋ผ๋Š” ๋ณ€์ˆ˜๋กœ ๋ฐ”๋€Œ์—ˆ๊ธฐ ๋•Œ๋ฌธ
	}

  • ํ•˜๋‚˜์˜ ํ–‰๋งŒ ์ถœ๋ ฅํ•  ๊ฒฝ์šฐ : list ์ถœ๋ ฅ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐํƒ€์ž…์˜ ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•œ๋‹ค. ์ด๋•Œ ์ƒ์„ฑํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ voํƒ€์ž…(Value Ojbect)์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์€ ๋ฉ”์„œ๋“œ์˜ ์ƒ์ž์—ญํ• ๊ณผ ๋ฐ์ดํ„ฐ ์—ญํ• ์„ ํ•œ๋‹ค๊ณ  ๋ฐฐ์› ๋Š”๋ฐ, voํƒ€์ž…์˜ ํด๋ž˜์Šค๋Š” ์ˆœ์ˆ˜ํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ ์—ญํ• ๋งŒ ํ•˜๋Š” ํด๋ž˜์Šค์ด๋‹ค.

๐Ÿ“ ๋ณ€ํ™˜์‹œ

ResultSet rs = stmt.executeQuery();
	// ResultSet -> ๋ฐ์ดํ„ฐ ํƒ€์ž…(Notice)์˜ ํด๋ž˜์Šค๋กœ ๋ฐ”๊พธ๊ธฐ
	Notice notice = null;
	// ํ•œ๋ฒˆ์— ์“ฐ๋ฉด Notice notice = new Notice();
	if(rs.next()) {
		notice = new Notice();
		notice.noticeNo = rs.getInt("noticeNo");
		notice.noticeTitle = rs.getString("noticeTitle");
		notice.noticeContent = rs.getString("noticeContent");
		notice.noticeWriter = rs.getString("noticeWriter");
		notice.createdate = rs.getString("createdate");
		notice.updatedate = rs.getString("updatedate");
	}

๐Ÿ“ ์ถœ๋ ฅ์‹œ

<table class="table container">
	<tr>
		<th class="table-warning">๊ธ€๋ฒˆํ˜ธ</th>
		<td><%=notice.noticeNo%></td>
	</tr>
	<tr>
		<th class="table-warning">๊ณต์ง€ ์ œ๋ชฉ</th>
		<td><%=notice.noticeTitle%></td>
	</tr>
	<tr>
		<th class="table-warning">๊ณต์ง€ ๋‚ด์šฉ</th>
		<td><%=notice.noticeContent%></td>
	</tr>
	<tr>
		<th class="table-warning">์ž‘์„ฑ์ž</th>
		<td><%=notice.noticeWriter%></td>
	</tr>
	<tr>
		<th class="table-warning">์ž‘์„ฑ์ผ์ž</th>
		<td><%=notice.createdate.substring(0, 10)%></td>
	</tr>
	<tr>
		<th class="table-warning">์ˆ˜์ •์ผ์ž</th>
		<td><%=notice.updatedate.substring(0, 10)%></td>
	</tr>
</table>

  • ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ–‰์„ ์ถœ๋ ฅํ•  ๊ฒฝ์šฐ : list๋กœ ์ถœ๋ ฅํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ ํƒ€์ž…์˜ ArrayList๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. ๋˜ํ•œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ–‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ์ €์žฅํ•ด์•ผ ํ•˜๋ฏ€๋กœ if๋ฌธ์ด ์•„๋‹Œ while๋ฌธ์„ ์ด์šฉํ•˜๊ณ , ์ถœ๋ ฅ์‹œ ๋˜ํ•œ foreach๋ฌธ์„ ์ด์šฉํ•œ๋‹ค.

๐Ÿ“ ๋ณ€ํ™˜์‹œ

// ๊ณต์ง€ ๋ฆฌ์ŠคํŠธ ์ถœ๋ ฅํ•˜๊ธฐ
	ResultSet rs = stmt.executeQuery();
	// ResultSetํƒ€์ž…(์ง‘ํ•ฉ ์ž๋ฃŒ๊ตฌ์กฐํƒ€์ž…)์„ ์ผ๋ฐ˜์ ์ธ ํƒ€์ž…(์ž๋ฐ” ๋ฐฐ์—ด ๋˜๋Š” ๊ธฐ๋ณธAPI์•ˆ์— ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ํƒ€์ž…์ธ List, Set, Map ๋“ฑ..)์œผ๋กœ ๋ฐ”๊พธ๊ธฐ
	// ResultSet -> ArrayList<Notice>
	ArrayList<Notice> noticeList = new ArrayList<Notice>();
	while(rs.next()) {
		Notice n = new Notice();
		n.noticeNo = rs.getInt("noticeNo"); // ์ด๋ฆ„์ด ๋ถˆ์ผ์น˜ // sql ์ž‘์„ฑ์‹œ ๋ณ„๋ช…์œผ๋กœ ๋ฐ›์•„์„œ ํ†ต์ผ์‹œ์ผœ์ฃผ๋Š” ๊ฒƒ์ด ์ข‹์Œ
		n.noticeTitle = rs.getString("noticeTitle");
		n.createdate = rs.getString("createdate");
		noticeList.add(n);
	}

๐Ÿ“ ์ถœ๋ ฅ์‹œ

<%
	// while(rs.next()) {
	for(Notice n : noticeList) {
%>
	<tr>
		<td>
			<a class="krFont text-dark" href="./noticeOne.jsp?noticeNo=<%=n.noticeNo%>">
				<%=n.noticeTitle %>
			</a>
		</td>
		<td class="krFont"><%=n.createdate.substring(0, 10) %></td>
	</tr>
<%
	}
%>



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

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