[๊ตฌ๋์์นด๋ฐ๋ฏธ IT๊ตญ๋น์ง์] ์ง๋ ์๊ฐ์ ์ด์ด์ ๋ค์ด์ด๋ฆฌ ํ๋ก์ ํธ๋ฅผ ์ด์ด๊ฐ๋ค. ์ด๋ฒ์๋ ์
๋ ฅ(insert) ๊ธฐ๋ฅ๊ณผ ์ญ์ (delete) ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ค.
๋จผ์ ์๋ก์ด ๊ธ ์์ฑ์ด ๊ฐ๋ฅํ๋๋ก noticeList.jsp ํ์ด์ง์ ๊ณต์ง์ ๋ ฅ ํผ์ผ๋ก ์ฐ๊ฒฐ๋๋ aํ๊ทธ๋ฅผ ์ถ๊ฐํ๋ค.
<!-- ๊ณต์ง์
๋ ฅ ํผ ์ถ๊ฐ -->
<a href="./insertNoticeForm.jsp">๊ณต์ง์
๋ ฅ</a>
๊ณต์ง์
๋ ฅ์ ํด๋ฆญํ๋ฉด insertNoticeForm.jsp ํ์ด์ง๋ก ์ด๋ํ๋ค.
๐ ์์ฑ
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>insertNoticeForm.jsp</title>
</head>
<body>
<div><!-- ๋ฉ์ธ๋ฉ๋ด -->
<a href="./home.jsp">ํ์ผ๋ก</a>
<a href="./noticeList.jsp">๊ณต์ง ๋ฆฌ์คํธ</a>
<a href="./scheduleList.jsp">์ผ์ ๋ฆฌ์คํธ</a>
</div>
<h1>๊ณต์ง์
๋ ฅ</h1>
<form action="./insertNoticeAction.jsp" method="post">
<table>
<tr>
<td>notice_title</td>
<td>
<input type="text" name="noticeTitle">
</td>
</tr>
<tr>
<td>notice_content</td>
<td>
<textarea rows="5" cols="80" name="noticeContent"></textarea>
</td>
</tr>
<tr>
<td>notice_writer</td>
<td>
<input type="text" name="noticeWriter">
</td>
</tr>
<tr>
<td>notice_pw</td>
<td>
<input type="password" name="noticePw">
</td>
</tr>
<tr>
<td colspan="2">
<button type="submit">์
๋ ฅ</button>
</td>
</tr>
</table>
</form>
</body>
</html>
AUTO-INCREMENT
์ด๋ฏ๋ก ์์ฑํ ํ์๊ฐ ์๋ค.๐ ๊ฒฐ๊ณผ
๊ธฐ๋ฅ์ ์ธ ๋ถ๋ถ์ด ์ด๋ฃจ์ด์ง๋ ํ์ด์ง์ด๋ค. ์ฆ, formํ์ด์ง์์ ๋๊ฒจ๋ฐ์ ๊ฐ๋ค์ ๋ฐ์ดํฐ ํ ์ด๋ธ์ insertํ๊ธฐ ์ํ ํ์ด์ง๋ก, ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋ ํ์ด์ง๋ ์๋๋ค. view๊ฐ ์๋ค๊ณ ๋ ํํํ ์ ์๋ค. view๊ฐ ์๋ ํ์ด์ง๋ ์ฌ์ฉ์๊ฐ ๋ค์ ๋์๊ฐ ์ ์๋๋ก ๋ง์ง๋ง์ redirection์ ๊ผญ ํด์ฃผ์ด์ผํ๋ค. ์๋๋ฉด ์ฌ์ฉ์๋ ๋นํ์ด์ง์ ๊ทธ๋๋ก ๋จ๊ฒ๋์ด๋ฒ๋ฆฌ๊ณ ๋ง๋ค.
์๋๋ ์ด๋ฐ ํ์ด์ง๋ฅผ html๋ก ์์ฑํ์ง ์๊ณ ์๋ฐ๋ก ์์ฑํ๋ค. ๊ธฐ๋ฅ์ ์ธ ๋ถ๋ถ๊ณผ ๋ณด์ฌ์ง๋ ๋ถ๋ถ์ ๋ฐ๋ก ๋๋ ์ ์์
ํ๋ ๊ฒ์ด๋ค. ์ด๊ฒ์ mvc(Model-View-Controller)๋ฐฉ์์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. mvc๋ฐฉ์์ ํ์
์ด ๊ฐ๋ฅํ๊ณ ์ ์ง๋ณด์์๋ ์ฉ์ดํ๋ค. ์ด ๋ฐฉ์์ ๋ํด์๋ ์ถํ ๋ ์์ธํ ๋ฐฐ์ฐ๊ธฐ๋ก ํ๋ค.
๐ ์์ฑ
<%@ 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 (์์ฒญ ํ๋ผ๋ฏธํฐ๊ฐ ์ ํจ์ฑ ๊ฒ์ฌ)
// ๊ณต๋ฐฑ๋ ์์ง ๋ง๊ธฐ! ๊ณต๋ฐฑ์ equals๋ก
if(request.getParameter("noticeTitle") == null
|| request.getParameter("noticeContent") == null
|| request.getParameter("noticeWriter") == null
|| request.getParameter("noticePw") == null
|| request.getParameter("noticeTitle").equals("")
|| request.getParameter("noticeContent").equals("")
|| request.getParameter("noticeWriter").equals("")
|| request.getParameter("noticePw").equals("")) {
response.sendRedirect("./insertNoticeForm.jsp");
return;
}
// ๊ฐ ๋ณ์๋ก ๋ฐ์๋๊ธฐ
String noticeTitle = request.getParameter("noticeTitle");
String noticeContent = request.getParameter("noticeContent");
String noticeWriter = request.getParameter("noticeWriter");
String noticePw = request.getParameter("noticePw");
// ๊ฐ๋ค์ ๋ฐ์ดํฐ ํ
์ด๋ธ์ ์
๋ ฅ(insert)
/*
insert into notice(
notice_title, notice_content, notice_writer, notice_pw, createdate, updatedate
) values(?,?,?,?,now(),now())
*/
// 1) ๋๋ผ์ด๋ฒ ๋ก๋ฉ
Class.forName("org.mariadb.jdbc.Driver");
// 2) mariadb ์๋ฒ์ ์ ์, ์ ์ ์ ์ง
Connection conn = DriverManager.getConnection(
"jdbc:mariadb://127.0.0.1:3306/diary","****","****");
// 3) ์ฟผ๋ฆฌ ์์ฑ ํ ์คํ
String sql = "insert into notice(notice_title, notice_content, notice_writer, notice_pw, createdate, updatedate) values(?,?,?,?,now(),now())";
PreparedStatement stmt = conn.prepareStatement(sql);
// ? ์ด 4๊ฐ (1~4)
stmt.setString(1, noticeTitle);
stmt.setString(2, noticeContent);
stmt.setString(3, noticeWriter);
stmt.setString(4, noticePw);
int row = stmt.executeUpdate(); // ๋๋ฒ๊น
์ฉ๋, 1์ด๋ฉด 1ํ insert์ฑ๊ณต/ 2๋ฉด 2ํ insert์ฑ๊ณต / 0์ด๋ฉด insert๋ ํ์ด ์์
// conn.commit(); // conn.setAutoCommit์ ๋ํดํธ๊ฐ์ด ture์ด๋ฏ๋ก ์๋ commit๋๊ธฐ ๋๋ฌธ์ ์๋ต
// redirection
response.sendRedirect("./noticeList.jsp");
%>
request.setCharacterEncoding("utf-8");
: form ํ์ด์ง์์ post๋ฐฉ์์ผ๋ก ๊ฐ๋ค์ ๋ฐ์์์ ๋์๋ ๊ฐ์ด ํ๊ธ์ด๋ ์๋๋ ์ธ์ฝ๋ฉ์ ํด์ฃผ๋ ๊ฒ์ด ์ข๋ค. ์ ์ผ ๋จผ์ ์๋จ์์ ํด์ค๋ค.
์ ํจ์ฑ ๊ฒ์ฌ (validation) : ๋ฐ์์จ ๊ฐ๋ค์ด null ๋๋ ๊ณต๋ฐฑ์ด ์๋์ง ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ๋จผ์ ํด์ฃผ๊ณ , ๊ฐ์ด null ์ด๊ฑฐ๋ ๊ณต๋ฐฑ์ผ ๊ฒฝ์ฐ ๋ค์ form ํ์ด์ง๋ก ๋์๊ฐ ์ ์๋๋ก ๋ฆฌ๋ค์ด๋ ์ ํด์ค๋ค. ๋ฆฌ๋ค์ด๋ ์ ํ ์ฝ๋๊ฐ ๊ณ์ ์งํ๋์ง ์๋๋ก return; ์ ์์ด์๋ ์๋๋ค!
createdate์ updatedate๋ NOW()๋ฅผ ์ด์ฉํ๋ค. ํ์ฌ ๋ ์ง๊ฐ (์๊ฐ๋ ํฌํจ๋๋ค) ์ ๋ ฅ๋๋ค.
.executeUpdate
: SELECT๋ฌธ์ ์คํ์ํฌ๋์๋ ExecuteQuery๋ฅผ ์ด์ฉํ์ฌ ResultSet์ ๋ฐํ๊ฐ์ ๋ด์๋ค. ํ์ง๋ง INSERT / DELETE / UPDATE๋ฌธ์ ExecuteUpdate๋ก ์คํํ๋ค. ๋ฐํ๊ฐ์ผ๋ก ์คํ๋ ํ์ ์๋ฅผ ๋ด๋๋ค. (1์ด๋ฉด 1ํ, 2๋ฉด 2ํ์ด ์ฑ๊ณต, 0์ผ๊ฒฝ์ฐ ์คํจ)
conn.commit();
: TCL ์ค ํ๋๋ก, ์๋๋ ์ฟผ๋ฆฌ ์คํํ ๋ง์ง๋ง์ commit์ ํด์ฃผ์ด์ผํ๋ค. ํ์ง๋ง conn.setAutoCommit์ ๋ํดํธ๊ฐ์ด ture ์ฆ ์๋์ผ๋ก commit์ด ๋์ด์์ผ๋ฏ๋ก ์์ฑํ์ง ์์๋ ๋๋ค. ํ์ง๋ง ๋ง์ฝ์ ์๋จ์์ conn.setAutoCommit์ false๊ฐ์ ์ฃผ์๋ค๋ฉด insert ํ์ commit์ ์์ฑํด์ฃผ๋ฉด ๋๋ค.
response.sendRedirect("./noticeList.jsp");
: ๋ชจ๋ ์ฝ๋๊ฐ ์คํ๋ ํ ์ฌ์ฉ์๊ฐ view๊ฐ ์๋ ๋น ํ์ด์ง์ ๋จ์ด์์ง ์๋๋ก ๋ฆฌ๋ค์ด๋ ์
ํด์ค๋ค.
๊ณผ์ ๋ก ๋ง๋ค์๋ storeํ์ด์ง์๋ ์ง์ insert ๊ธฐ๋ฅ์ ์ถ๊ฐํด๋ณด์๋ค.
<!-- ๊ธ์ฐ๊ธฐ ํผ ์ถ๊ฐ -->
<a href="./insertStoreForm.jsp">๊ธ์ฐ๊ธฐ</a>
๊ธ์ฐ๊ธฐ๋ฅผ ํด๋ฆญํ๋ฉด insertStoreForm.jsp ํ์ด์ง๋ก ์ด๋ํ๋ค.
ํจ์ค์๋์
๋ ฅ๋๋ ๋ง๋ค๊ธฐ ์ํด ๋ฐ์ดํฐ ํ
์ด๋ธ์ store_pw๋ฅผ ์ถ๊ฐํ๋ค.
๐ ์์ฑ
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>insertStoreForm.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>
<div class="container mt-3">
<h1 class="center">๊ธ ์์ฑ🍽</h1>
<form action="./insertStoreAction.jsp" method="post">
<table class="table table-bordered">
<tr>
<td>์๋น์ด๋ฆ</td>
<td>
<input type="text" name="storeName" class="form-control">
</td>
</tr>
<tr>
<td>์นดํ
๊ณ ๋ฆฌ</td>
<td>
<select name="storeCategory" class="form-select">
<option value="">==์ ํ==</option> <!-- ์ ํ๋์ value๋ฅผ ๊ณต๋ฐฑ -->
<option value="ํ์">ํ์</option>
<option value="์ผ์">์ผ์</option>
<option value="์ค์">์ค์</option>
</select>
</td>
</tr>
<tr>
<td>์ฃผ์</td>
<td>
<input type="text" name="storeAddress" class="form-control">
</td>
</tr>
<tr>
<td>์ ์์</td>
<td>
<input type="number" name="storeEmpCnt" class="form-control">
</td>
</tr>
<tr>
<td>๊ฐ์
์ผ์</td>
<td>
<input type="date" name="storeBegin" class="form-control">
</td>
</tr>
<tr>
<!-- password ์
๋ ฅ๋ ์ถ๊ฐ -->
<td>๋น๋ฐ๋ฒํธ</td>
<td>
<input type="password" name="storePw" class="form-control">
</td>
</tr>
<tr>
<td colspan="2">
<button type="submit" class="btn btn-primary">์
๋ ฅ</button>
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
๐ ๊ฒฐ๊ณผ
๐ ์์ฑ
<%@ 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");
// ์์ฒญ๊ฐ ๊ฒ์ฌ
// null๊ณผ ๊ณต๋ฐฑ ๊ฒ์ฌ
if(request.getParameter("storeName") == null
|| request.getParameter("storeCategory") == null
|| request.getParameter("storeAddress") == null
|| request.getParameter("storeEmpCnt") == null
|| request.getParameter("storeBegin") == null
|| request.getParameter("storePw") == null
|| request.getParameter("storeName").equals("")
|| request.getParameter("storeCategory").equals("")
|| request.getParameter("storeAddress").equals("")
|| request.getParameter("storeEmpCnt").equals("")
|| request.getParameter("storeBegin").equals("")
|| request.getParameter("storePw").equals("")) {
response.sendRedirect("./insertStoreForm.jsp");
// ๊ฐ์ด null์ด๊ฑฐ๋ ๊ณต๋ฐฑ์ผ ๊ฒฝ์ฐ ๋ค์ ๋์๊ฐ์ผํ ์ฃผ์
return;
// 1) ์ฝ๋์งํ์ข
๋ฃ 2) ๋ฐํ๊ฐ์ ๋๊ฒจ์ค
// ๊ฐ์ด null์ด๊ฑฐ๋ ๊ณต๋ฐฑ์ผ ๊ฒฝ์ฐ ๋ฐ์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ์๋๊ธฐ ๋๋ฌธ์
}
// ๊ฐ ๋ณ์๋ก ๋ฐ์๋๊ธฐ
String storeName = request.getParameter("storeName");
String storeCategory = request.getParameter("storeCategory");
String storeAddress = request.getParameter("storeAddress");
String storeBegin = request.getParameter("storeBegin");
String storePw = request.getParameter("storePw");
int storeEmpCnt = Integer.parseInt(request.getParameter("storeEmpCnt")); // ์ ์์๋ intํ์
// ๊ฐ๋ค์ ๋ฐ์ดํฐ ํ
์ด๋ธ์ insertํ๊ธฐ
// 1) ๋๋ผ์ด๋ฒ ๋ก๋ฉ
Class.forName("org.mariadb.jdbc.Driver");
System.out.println("๋๋ผ์ด๋ฒ ๋ก๋ฉ ์ฑ๊ณต");
// 2) mariadb ์๋ฒ์ ์ ์, ์ ์ ์ ์ง
Connection conn = DriverManager.getConnection(
"jdbc:mariadb://127.0.0.1:3306/homework0419","****","****");
System.out.println("์ ์์ฑ๊ณต: "+conn);
// 3) ์ฟผ๋ฆฌ ์์ฑ ํ insert
String sql = "insert into store(store_name, store_category, store_address, store_emp_cnt, store_begin, store_pw, createdate, updatedate) values(?,?,?,?,?,?,now(),now())";
PreparedStatement stmt = conn.prepareStatement(sql);
System.out.println("์
๋ ฅ์ฟผ๋ฆฌ: " + stmt);
// ? ์ด ๋ค์ฏ๊ฐ (1~5)
stmt.setString(1, storeName);
stmt.setString(2, storeCategory);
stmt.setString(3, storeAddress);
stmt.setInt(4, storeEmpCnt); // ์ ์์๋ intํ์
stmt.setString(5, storeBegin);
stmt.setString(6, storePw);
int row = stmt.executeUpdate(); // 1์ด๋ฉด 1ํ insert์ฑ๊ณต, 2๋ฉด 2ํ insert์ฑ๊ณต, 0์ด๋ฉด insert๋ ํ์ด ์์
System.out.println("์
๋ ฅ์ฑ๊ณต: " + row); // ๋๋ฒ๊น
// 1
// conn.commit(); ์ ์๋ต // conn.setAutoCommit์ ๋ํดํธ๊ฐ์ด ture์ด๋ฏ๋ก ์๋ commit๋๊ธฐ ๋๋ฌธ์
// view๊ฐ ์์ผ๋ฏ๋ก redirection
response.sendRedirect("./storeList.jsp");
%>
๋๋ฒ์งธ๋ก ์์ฑ๋ ๊ธ์ ์ญ์ ํ ์ ์๋๋ก noticeOne.jsp ํ์ด์ง์ ๊ธ์ญ์ ํผ์ผ๋ก ์ฐ๊ฒฐ๋๋ aํ๊ทธ๋ฅผ ์ถ๊ฐํ๋ค. ๋ด์ผ ์ถ๊ฐํ ์์ (update)๊ธฐ๋ฅ์ ์ํ aํ๊ทธ๋ ๋ฏธ๋ฆฌ ๊ฐ์ด ์ถ๊ฐํ๋ค.
<div>
<!-- ์ด๋ค ๊ฒ์๊ธ์(noticeNo๋ก ๊ตฌ๋ถ) ์ญ์ /์์ ํ ์ง -->
<a href="./updateNoticeForm.jsp?noticeNo=<%=noticeNo%>">์์ </a>
<a href="./deleteNoticeForm.jsp?noticeNo=<%=noticeNo%>">์ญ์ </a>
</div>
์ญ์ ๋ฅผ ํด๋ฆญํ๋ฉด deleteNoticeForm.jsp ํ์ด์ง๋ก ์ด๋ํ๋ค.
๐ ์์ฑ
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
// ์์ฒญ๊ฐ ์ ํจ์ฑ ๊ฒ์ฌ
if(request.getParameter("noticeNo") == null) {
response.sendRedirect("./noticeList.jsp");
return; // 1) ์ฝ๋์งํ์ข
๋ฃ 2) ๋ฐํ๊ฐ์ ๋จ๊ธธ๋
}
// ๊ฐ ๋ณ์์ ๋ฐ๊ธฐ
// int ํ์
์ด๋ฏ๋ก Integer.parseInt
int noticeNo = Integer.parseInt(request.getParameter("noticeNo"));
System.out.println(noticeNo + "<-- deleteNoticeForm param noticeNo"); // ๋๋ฒ๊น
ํ ๋ ์์ ์ค๋ช
๋ ์ ๋ฃ๊ธฐ
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>deleteNoticeForm.jsp</title>
</head>
<body>
<h1>๊ณต์ง ์ญ์ </h1>
<form action="./deleteNoticeAction.jsp" method="post">
<table>
<tr>
<td>notice_no</td>
<td>
<!-- <input type="hidden" name="noticeNo" value="<%=noticeNo%>">
์ด๋ ๊ฒ ํ๋ฉด ๊ฐ์ด ์์ ์๋ณด์ด๊ณ ๋ฌผ๋ก ์์ ๋ ๋ถ๊ฐ๋ฅ -->
<input type="text" name="noticeNo" value="<%=noticeNo%>" readonly="readonly">
<!-- readonly๋ ๊ฐ์ด ๋์ ๋ณด์ด์ง๋ง ์์ ๋ถ๊ฐ๋ฅ -->
</td>
</tr>
<tr>
<td>notice_pw</td>
<td>
<!-- action ํ์ด์ง์์ pw๊ฐ ์ผ์นํ๋์ง ํ์ธ -->
<input type="password" name="noticePw">
</td>
</tr>
<tr>
<td colspan="2">
<button type="submit">์ญ์ </button>
</td>
</tr>
</table>
</form>
</body>
</html>
๐ ๊ฒฐ๊ณผ
๐ ์์ฑ
<%@ 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("noticeNo") == null
|| request.getParameter("noticePw") == null
|| request.getParameter("noticeNo").equals("")
|| request.getParameter("noticePw").equals("")) {
response.sendRedirect("./noticeList.jsp");
return;
}
// ๊ฐ ๋ณ์์ ๋ฃ๊ธฐ
int noticeNo = Integer.parseInt(request.getParameter("noticeNo"));
String noticePw = request.getParameter("noticePw");
// ๋๋ฒ๊น
// ์ด๋์์ ์ถ๋ ฅํ๋ ๊ฑด์ง๋ ๊ฐ์ด ์ ์ด์ฃผ๊ธฐ
System.out.println("deleteNoticeAction param noticeNo: " + noticeNo);
System.out.println("deleteNoticeAction param noticePw: " + noticePw);
// 1) ๋๋ผ์ด๋ฒ ๋ก๋ฉ
Class.forName("org.mariadb.jdbc.Driver");
// 2) mariadb ์๋ฒ์ ์ ์, ์ ์ ์ ์ง
Connection conn = DriverManager.getConnection(
"jdbc:mariadb://127.0.0.1:3306/diary","****","****");
// 3) ์ญ์ ์ฟผ๋ฆฌ ์์ฑ
// storeNo์ storepw๊ฐ ๋ชจ๋ ์ผ์นํด์ผํ๋ฏ๋ก and์ ์ฌ์ฉ
String sql = "delete from notice where notice_no=? and notice_pw=?";
PreparedStatement stmt = conn.prepareStatement(sql);
// ? ์ด 2๊ฐ (1~2)
stmt.setInt(1, noticeNo);
stmt.setString(2, noticePw);
System.out.println("deleteNoticeAction sql: " + stmt); // ๋๋ฒ๊น
// ์ญ์ ์ฟผ๋ฆฌ๊ฐ ์ ์คํ๋์๋์ง ํ์ธ
int row = stmt.executeUpdate(); // ์ ์ ์คํ์ 1, ์คํจ์ 0
System.out.println("deleteNoticeAction row: " + row);
if(row == 0) {
response.sendRedirect("./deleteNoticeForm.jsp?noticeNo=" + noticeNo);
} else {
response.sendRedirect("./noticeList.jsp");
}
%>
System.out.println("deleteNoticeAction param noticeNo: " + noticeNo);
: ๋๋ฒ๊น
์ฝ๋๋ฅผ ์์ฑํ ๋์๋ ์ด๋ค ํ์ด์ง์ ์ด๋ค ๊ฐ์ธ์ง ์์ ๊ผญ ๋ถ์ฌ์ฃผ๊ธฐ!! ๋ํ ์ฝ๋๋ฅผ ๋ค ์์ฑํ ๋ค ๋ฃ๋ ๋๋ฒ๊น
์ฝ๋๋ ์๋ฌด๋ฐ ์๋ฏธ๊ฐ ์๋ค. ๋๋ฒ๊น
์ฝ๋๋ ๊ทธ๋๊ทธ๋ ์คํ์์ผ๋ณด๋ฉฐ ๊ฐ์ด ์ ์์ ์ ๋์ด์ค๋์ง, ์ฟผ๋ฆฌ๊ฐ ์ ๋๋ก ์คํ๋์๋์ง๋ฅผ ํ์ธํ๋ ์ฉ๋์ด๊ธฐ ๋๋ฌธ์ด๋ค. ์ฃผ์ ๋ํ ๋ง์ฐฌ๊ฐ์ง์ด๋ค.
storeNo์(AND) storePw๊ฐ ์ผ์นํ๋ ๊ฒ์๊ธ์ ์ญ์ ํด์ผํ๋ฏ๋ก where์ ์ ์ฌ์ฉํ๋ค.
insert์ ๋ค๋ฅด๊ฒ ์
๋ ฅ๋ ํจ์ค์๋์ ๊ฐ์ ๋ฐ๋ผ ์ผ์นํ์ง ์์ ๊ฒฝ์ฐ ์ญ์ ๊ฐ ์คํจ๋๋ ๋ถ๊ธฐ๊ฐ ์๊ฒผ๋ค. if๋ฌธ์ ์ด์ฉํ์ฌ row์ ๊ฐ์ผ๋ก ๋ถ๊ธฐ์ ๋ฐ๋ผ ์ญ์ ๊ฐ ์คํจํ์ ๊ฒฝ์ฐ์ ์ ์์ ์ผ๋ก ์ญ์ ๋์์ ๊ฒฝ์ฐ์ view๋ฅผ ๋ฆฌ๋ค์ด๋ ์
ํ ์ ์๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก delete ๊ธฐ๋ฅ์ store ํ์ด์ง์๋ ์ง์ ์ถ๊ฐํด๋ณด์๋ค.
<div class="center">
<!-- ์์ /์ญ์ aํ๊ทธ ์ถ๊ฐ -->
<!-- ์ด๋ค(storeNo)๊ฒ์๊ธ์ ์์ /์ญ์ ํ ์ง ์ ์ ์๋๋ก storeNo๊ฐ ๋๊ธฐ๊ธฐ -->
<!-- ์ด๋ค(storeNo)๊ฒ์๊ธ์ ์์ /์ญ์ ํ ์ง ์ถ๋ ฅํด์ฃผ๊ธฐ ์ํด storeName๊ฐ ๋๊ธฐ๊ธฐ -->
<a href="./updateStoreForm.jsp?storeNo=<%=storeNo%>">์์ </a>
<a href="./deleteStoreForm.jsp?storeNo=<%=storeNo%>&storeName=<%=rs.getString("store_name")%>">์ญ์ </a>
</div>
๐ ์์ฑ
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
// ์ ํจ์ฑ ๊ฒ์ฌ
// null์ด๊ฑฐ๋ ๊ณต๋ฐฑ์ผ ๊ฒฝ์ฐ
if(request.getParameter("storeNo") == null
|| request.getParameter("storeName") == null
|| request.getParameter("storeNo").equals("")
|| request.getParameter("storeName").equals("")) {
response.sendRedirect("./storeList.jsp");
// ๋์๊ฐ ํ์ด์ง ์ฃผ์ ์๋ ค์ฃผ๊ธฐ
return;
// 1) ์ฝ๋์งํ์ข
๋ฃ 2) ๋ฐํ๊ฐ์ ๋๊ธธ๋
}
// null์ด๊ฑฐ๋ ๊ณต๋ฐฑ์ด ์๋๊ฒฝ์ฐ
// ๋ณ์์ ๊ฐ ๋ฃ๊ธฐ
int storeNo = Integer.parseInt(request.getParameter("storeNo")); // int ํ์
์ด๋ฏ๋ก Integer.parseInt
String storeName = request.getParameter("storeName");
// ๋๋ฒ๊น
System.out.println("deleteStoreForm storeNo: " + storeNo);
System.out.println("deleteStoreForm storeName: " + storeName);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>deleteStoreForm.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>
<div class="container mt-3">
<h1 class="center">๊ธ ์ญ์ 🍽</h1>
<form action="./deleteStoreAction.jsp" method="post">
<table class="table table-bordered">
<tr>
<td>์๋น์ด๋ฆ</td>
<td>
<!-- action ํ์ด์ง์์ sql๋ฌธ์ storeName์ ์ฌ์ฉํ์ง๋ ์์ง๋ง,
row๊ฐ 0์ด ๋ ๊ฒฝ์ฐ ๋ค์ form ํ์ด์ง๋ก ๋์์ค๊ธฐ ๋๋ฌธ์ storeName์ ๊ฐ๋ ๊ฐ์ด ๋๊ฒจ์ค๋ค -->
<input type="text" name="storeName" value="<%=storeName%>" class="form-control" readonly="readonly">
</td>
</tr>
<tr>
<td>๊ธ๋ฒํธ</td>
<td>
<!-- <input type="hidden" name="storeNo" value="<%=storeNo%>">
์ด๋ ๊ฒ ํ๋ฉด ๊ฐ์ด ์์ ์๋ณด์ธ๋ค. ์์ ๋ ๋ฌผ๋ก ๋ถ๊ฐ๋ฅ -->
<input type="text" name="storeNo" value="<%=storeNo%>" class="form-control" readonly="readonly">
<!-- readonly๋ ๊ฐ์ด ๋์ ๋ณด์ด์ง๋ง ์์ ์ ๋ถ๊ฐ๋ฅ -->
</td>
</tr>
<tr>
<td>๋น๋ฐ๋ฒํธ</td>
<td>
<!-- action ํ์ด์ง์์ password๊ฐ ์ผ์นํ๋์ง ํ์ธํ ๊ฒ -->
<input type="password" name="storePw" class="form-control">
</td>
</tr>
<tr>
<td colspan="2">
<button type="submit" class="btn btn-primary">์ญ์ </button>
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
๐ ๊ฒฐ๊ณผ
์๋น์ด๋ฆ๋ ๊ฐ์ด ํ์๋์๋ค. ์ญ์ ์ ํ์ธ์ฉ์ด๋ฏ๋ก ์์ ์ ๋ถ๊ฐ๋ฅํ๋ค.
๐ ์์ฑ
<%@ 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" %>
<%
// ์ ํจ์ฑ ๊ฒ์ฌ
// null์ด๊ฑฐ๋ ๊ณต๋ฐฑ์ผ ๊ฒฝ์ฐ
if(request.getParameter("storeNo") == null
|| request.getParameter("storePw") == null
|| request.getParameter("storeName") == null
|| request.getParameter("storeNo").equals("")
|| request.getParameter("storePw").equals("")
|| request.getParameter("storeName").equals("")) {
response.sendRedirect("./storeList.jsp");
// ๋์๊ฐ ํ์ด์ง ์ฃผ์ ์๋ ค์ฃผ๊ธฐ
return;
// 1) ์ฝ๋์งํ์ข
๋ฃ 2) ๋ฐํ๊ฐ์ ๋๊ธธ๋
}
//๋ณ์์ ๊ฐ ๋ฃ๊ธฐ
// null์ด๊ฑฐ๋ ๊ณต๋ฐฑ์ด ์๋ ๊ฒฝ์ฐ
int storeNo = Integer.parseInt(request.getParameter("storeNo")); // storeNo๋ intํ์
String storePw = request.getParameter("storePw");
String storeName = request.getParameter("storeName");
// ๋๋ฒ๊น
System.out.println("deleteStoreAction storeNo: " + storeNo);
System.out.println("deleteStoreAction storePw: " + storePw);
System.out.println("deleteStoreAction storeName: " + storeName);
// 1) ๋๋ผ์ด๋ฒ ๋ก๋ฉ
Class.forName("org.mariadb.jdbc.Driver");
// 2) mariadb ์๋ฒ ์ ์
Connection conn = DriverManager.getConnection(
"jdbc:mariadb://127.0.0.1:3306/homework0419","****","****");
// 3) ์ญ์ ์ฟผ๋ฆฌ ์์ฑ
// storeNo์ storepw๊ฐ ๋ชจ๋ ์ผ์นํด์ผํ๋ฏ๋ก and์ ์ฌ์ฉ
String sql = "delete from store where store_no=? and store_pw=?";
PreparedStatement stmt = conn.prepareStatement(sql);
// ? ์ด 2๊ฐ (1~2)
stmt.setInt(1, storeNo); // storeNo๋ intํ์
stmt.setString(2, storePw);
System.out.println("deleteStoreAction sql: " + stmt); // ๋๋ฒ๊น
// ์ญ์ ์ฟผ๋ฆฌ๊ฐ ์ ์คํ๋์๋์ง ํ์ธ
int row = stmt.executeUpdate(); // ์ฑ๊ณต์ 1, ์คํจ์ 0
System.out.println("deleteStoreAction row: " + row);
// ์ญ์ ์ฟผ๋ฆฌ ์ฑ๊ณต์ ๋ฌด์ ๋ฐ๋ผ redirection
if(row == 0) {
response.sendRedirect("./deleteStoreForm.jsp?storeNo="+storeNo+"&storeName="+storeName);
// formํ์ด์ง๋ก ๋์๊ฐ๊ธฐ ๋๋ฌธ์ no์ name๋ฅผ ๊ฐ์ด ๋๊ฒจ์ค๋ค
} else {
response.sendRedirect("./storeList.jsp");
}
%>
์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ์ ์ ๊ธฐ๋ณธ์ ์ธ ํํ์ด์ง์ ํํ๋ฅผ ๊ฐ์ถฐ๋๊ฐ๋ ๊ฒ ๊ฐ์์ ์ฌ๋ฏธ์์๋ค. ๋๋ฆ๋๋ก ์ฌ์ํ์ง๋ง ์๋ก์ด ๋ถ๋ถ์ ์ถ๊ฐํ๋ฉด์ ๊ณ ๋ฏผํ๋ ๊ณผ์ ๋ ๋ณด๋์์๋ค! ๐ ๋ ๋ง์ ๊ฒ์ ๋ฐฐ์ฐ๊ฒ ๋๋ค๋ฉด ๋ ๋ง์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์์ ๊ฒ์ด๋ค. ๊ทธ๋ ์ด ๊ธฐ๋ค๋ ค์ง๋ค!