본문 바로가기

웹 개발

JSP와 MariaDB 연동하기(3)

728x90

앞선 내용들을 바탕으로

DB에 있는 데이터 값들을 페이지에 table로 출력(전체가 아닌 일부)하고

row의 값들 중 하나를 클릭하면  그 row에 대한 모든 값들이 나오게 만드는 연습을 했다.

 

2024.03.14 - [웹 개발] - 20240313 JSP와 MariaDB 연동하기(2)

 

20240313 JSP와 MariaDB 연동하기(2)

DriverManager.getConnecton()메소드를 통해 RDBMS 연결을 했다. 그 후 DB에 쿼리를 전달해서 데이터를 확인할 수 있도록 해야한다. DriverManager.getConnecton()를 Connection 객체에 담는다. PreparedStatement클래스를

broad-backend.tistory.com

 

위의 글에 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>

728x90

'웹 개발' 카테고리의 다른 글

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