[๊ตฌ๋์์นด๋ฐ๋ฏธ IT๊ตญ๋น์ง์] ์ผ์ ๋ฆฌ์คํธ, ์ผ์ ์ถ๊ฐ, ์ผ์ ์์ , ์ผ์ ์ญ์ , ์ผ์ ์กฐํ(๋ฌ๋ ฅ) ๋ฑ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ค. 15์ผ์ฐจ๋ ๋ฌ๋ ฅ์กฐํ ์ ๊ฐ ์ผ๋ง๋ค ์ผ์ ์ ๋ณผ ์ ์๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ณ , Result Set์ผ๋ก ์ถ๋ ฅํ ๋ชจ๋ ํ์ด์ง๋ฅผ ์ผ๋ฐ์ ์ธ ์๋ฃ๊ตฌ์กฐ ํ์
์ผ๋ก ๋ณ๊ฒฝํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ถํธ์คํธ๋ฉ5์ผ๋ก ์ต์ข
์ ์ผ๋ก CSS๋ฅผ ๋ง๋ฌด๋ฆฌํ์ฌ ๋ค์ด์ด๋ฆฌ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ค.
์ผ์ (schedule)๊ธฐ๋ฅ ์ถ๊ฐ๋ฅผ ์ํด ์ํ๋ฐ์ดํฐ๋ฅผ ์์ฑํ์ฌ schedule ํ
์ด๋ธ์ ์ถ๊ฐํ๋ค.
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> 💛 ์ค๋์ ์ผ์ 🌻 </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>
์ง๊ธ๊น์ง ์ฐ๋ฆฌ๋ SELECT๋ก ๋ฐ์ดํฐ ํ
์ด๋ธ์ ์กฐํํ์ฌ ResulSet ํ์
์ผ๋ก ๊ฒฐ๊ณผ๊ฐ์ ๋ถ๋ฌ์จ ๋ค ์ถ๋ ฅํ์๋ค. ํ์ง๋ง ์ถ๋ ฅ์์๋ ResulSet ํ์
๋ณด๋ค๋ ์ผ๋ฐ์ ์ธ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. ์ฌ๊ธฐ์ ์ผ๋ฐ์ ์ธ ์๋ฃ๊ตฌ์กฐ ํ์
์ด๋, ์ฃผ๋ก ํด๋์ค์ ArrayList ๋ฑ์ ๋งํ๋ค. ResulSet์ ํ๋ฒํ ํ์
์ด ์๋๋ผ ํน์ํ ํ์
์ด๊ธฐ ๋๋ฌธ์ ๊ถ๊ทน์ ์ธ '๋ชจ๋ธ๊ฐ'์ด ๋ ์ ์๋ค. ๊ทธ๋์ ์๋ฐ์ ๊ธฐ๋ณธ api ์๋ฃ ๊ตฌ์กฐํ์
์ผ๋ก ๋ณํํด์ผํ๋ ๊ฒ์ด๋ค.
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๋ผ๋ ๋ณ์๋ก ๋ฐ๋์๊ธฐ ๋๋ฌธ
}
๐ ๋ณํ์
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>
๐ ๋ณํ์
// ๊ณต์ง ๋ฆฌ์คํธ ์ถ๋ ฅํ๊ธฐ
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>
<%
}
%>