앞선 내용들을 바탕으로
DB에 있는 데이터 값들을 페이지에 table로 출력(전체가 아닌 일부)하고
row의 값들 중 하나를 클릭하면 그 row에 대한 모든 값들이 나오게 만드는 연습을 했다.
2024.03.14 - [웹 개발] - 20240313 JSP와 MariaDB 연동하기(2)
위의 글에 db의 table을 사용할 것이다.
특정 column만 출력하기 위한 쿼리문을 String 변수에 담았다.
Driver클래스를 메모리에 로딩시키고, DriverManager.getConnecton()로 DB를 연결한다.
DriverManager.getConnecton()를 Connection 객체에 담는다.
PreparedStatement클래스를 이용해 객체를 생성하고 Connection클래스의 prepareStatement()메소드를 통해 쿼리를 전달한다
executeQuery() 메소드를 ResultSet에다가 담는다.
페이지에는
while문으로 행이 없을때까지 반복하고 보여줄 column만 값을 출력한다
여기서는 EMPNO에 <a>태그를 달아 상세하게 볼 수 있도록 만들었다.
원하는 EMPNO를 클릭하면 쿼리스트링으로 값을 넘겨준다.
empList.jsp
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
/*
SELECT EMPNO, ENAME
FROM emp
ORDER BY EMPNO;
*/
String sql = "SELECT EMPNO, ENAME FROM emp ORDER BY EMPNO";
Class.forName("org.mariadb.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3307/gdj80","root","****");
PreparedStatement stmt = conn.prepareStatement(sql);
ResultSet rs =stmt.executeQuery();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- Latest compiled and minified CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Latest compiled JavaScript -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body class="container">
<!-- 메인 메뉴 -->
<div>
<a href="/crudtest/emp/empList.jsp">emp 관리</a>
</div>
<!-- 메인 내용 -->
<h1>emp 리스트</h1>
<div>
<table class="table">
<tr>
<th>EMPNO</th>
<th>ENAME</th>
</tr>
<%
while(rs.next()) {
%>
<tr>
<td>
<a href="/crudtest/emp/empOne.jsp?EMPNO=<%=rs.getString("EMPNO")%>">
<%=rs.getString("EMPNO")%>
</a>
</td>
<td><%=rs.getString("ENAME")%>
</td>
</tr>
<%
}
%>
</table>
</div>
</body>
</html>
위와 같이 db세팅과 쿼리문을 날릴 세팅을 해놓는다.
이번에는 해당하는 EMPNO에 따라 출력할 row가 다르다
따라서 empList.jsp로 넘긴 EMPNO의 값을 request.getParameter로 가져온다.
또한 String으로 선언한 쿼리문의 WHERE절에 ?로 작성하는 부분이 있는데 이 부분에 EMPNO의 값이 들어간다.
?에 해당하는 값을 넣기위해서는 PreparedStatement의 setString, setInt 같은 메소드를 이용한다.
매개변수로 1번째에는 몇번째 물음표인지, 2번째에는 어떤 값을 넣을 것인지 전달한다.
그 후에는
if문을 통해 해당 하는 EMPNO의 행이 존재하면
해당하는 row를 전부 출력한다.
해당하는 EMPNO가 없다면 그 값은 없다고 페이지에 출력해준다.
empOne.jsp
<%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
/*
SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO
FROM emp
WHERE EMPNO = ?;
*/
String EMPNO = request.getParameter("EMPNO");
String sql = "SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO FROM emp WHERE EMPNO = ?";
System.out.println(sql); // 값 체크
Class.forName("org.mariadb.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3307/gdj80","root","****");
PreparedStatement stmt = conn.prepareStatement(sql);
// 문자열 쿼리안에 ?(표현식을 값으로 치환)
stmt.setString(1, EMPNO);
System.out.println(stmt);
ResultSet rs =stmt.executeQuery();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- Latest compiled and minified CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Latest compiled JavaScript -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body class="container">
<!-- 메인 메뉴 -->
<div>
<a href="/crudtest/emp/empList.jsp">emp 관리</a>
</div>
<!-- 메인 내용 -->
<h1>emp 상세 보기</h1>
<%
if(rs.next()) {
%>
<table class="table">
<tr>
<th>EMPNO</th>
<td><%=rs.getInt("EMPNO")%></td>
</tr>
<tr>
<th>ENAME</th>
<td><%=rs.getString("ENAME")%></td>
</tr>
<tr>
<th>JOB</th>
<td><%=rs.getString("JOB")%></td>
</tr>
<tr>
<th>MGR</th>
<td><%=rs.getInt("MGR")%></td>
</tr>
<tr>
<th>HIREDATE</th>
<td><%=rs.getString("HIREDATE")%></td>
</tr>
<tr>
<th>SAL</th>
<td><%=rs.getInt("SAL")%></td>
</tr>
<tr>
<th>COMM</th>
<td><%=rs.getInt("COMM")%></td>
</tr>
<tr>
<th>DEPTNO</th>
<td><%=rs.getInt("DEPTNO")%></td>
</tr>
</table>
<%
} else {
%>
<div><%=EMPNO%>은 존재하지 않습니다.</div>
<%
}
%>
</body>
</html>
'웹 개발' 카테고리의 다른 글
JSP와 MariaDB 연동하기(6) (0) | 2024.03.18 |
---|---|
JSP와 MariaDB 연동하기(5) (0) | 2024.03.15 |
JSP와 MariaDB 연동하기(4) (0) | 2024.03.14 |
JSP와 MariaDB 연동하기(2) (0) | 2024.03.14 |
JSP와 MariaDB 연동하기(1) (0) | 2024.03.13 |