[JSP] 검색 기능 구현 | Dynamic Web Project
2024.04.17 - [JSP] - [JSP] Dynamic Web Project에서 Oracle DB 연동하고 update 쿼리 날리기
이제 오라클 DB에서 가지고 온 데이터의 값 중에 원하는 레코드만 가지고 올 수 있도록 검색 기능을 추가해 보자.
alist.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%
String url = "jdbc:oracle:thin:@//localhost:1521/xe";
String uid = "system";
String pwd = "1234";
Class.forName("oracle.jdbc.OracleDriver");
Connection con = DriverManager.getConnection(url, uid, pwd);
%>
우선 jsp 파일에서 오라클 연동을 해주고 시작.

<table border=1>
<tr>
<th>학번</th><th>이름</th><th>국어</th>
<th>영어</th><th>수학</th><th>역사</th>
</tr>
<%
while(rs.next()) {
%>
<tr>
<td><%=rs.getString("sno") %></td>
<td><%=rs.getString("sname") %></td>
<td><%=rs.getInt("kor") %></td>
<td><%=rs.getInt("eng") %></td>
<td><%=rs.getInt("math") %></td>
<td><%=rs.getInt("hist") %></td>
</tr>
<% } %>
</table>
테이블의 형태는 기존에 사용했던 테이블을 그대로 활용.

<form action="alist.jsp">
<select name="ch1">
<option value="sno">학번</option>
<option value="sname">이름</option>
</select>
<input type=text name="ch2">
<input type=submit value="검색">
</form>
그 위에 form 태그를 사용하여 검색 창을 만들어 준다.
action은 submit 을 눌렀을 때 이동하는 곳인데, 만약 적어주지 않는다면 본인의 파일로 값을 전달하기 때문에 지금의 상태라면 없어도 동일한 상태이다.
select의 name을 ch1이라고 해주고, input의 name을 ch2로 해준다.
검색의 기준(학번, 이름 등)은 ch1, 검색하려는 값은 ch2가 되는 것이다.
이렇게 하면 ch1, ch2 값이 파라미터로 전달이 될 것이고,

String ch1 = request.getParameter("ch1");
String ch2 = request.getParameter("ch2");
전달된 값을 각각 변수에 담아주었다.
이제 상황에 따라 다른 쿼리를 날려야 하니 if문을 사용하여 경우를 나누어 보자.

<%
String sql = "";
PreparedStatement pstmt = null;
if(ch1 == null || ch2 == "") {
sql = "select * from examtbl order by sno desc fetch first 5 row only";
pstmt = con.prepareStatement(sql);
} else if (ch1.equals("sno")) {
sql = "select * from examtbl where sno like ? order by sno desc";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, '%'+ch2+'%');
} else if (ch1.equals("sname")) {
sql = "select * from examtbl where sname like ? order by sno desc";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, '%'+ch2+'%');
}
ResultSet rs = pstmt.executeQuery();
%>
if문 안과 밖에서 값을 사용하기 위해 변수를 밖에서 먼저 잡아주고 경우에 따라서 쿼리문을 작성해 주었다.
첫 번째 쿼리에서 나오는 쿼리는 오라클 버전이 높아지면서 생긴 상위 5개의 레코드만 출력하는 쿼리문이다.
(오라클 버전이 11이다? 그럼 실행할 수 없는 쿼리, 현재 사용하는 오라클 버전은 21)
두 번째, 세 번째 쿼리는 sno, sname에 ch2가 포함된 레코드를 출력하는 쿼리문이다.
그럼 결과를 확인해보자.

우선 검색하지 않은 상태에서는 상위 5개의 레코드만 출력이 된다.

이번에는 학번에 10이 들어가는 결과물.

마지막으로 이름에 김이 들어가는 결과물.
이렇게 결과에 따라 맞는 결과물을 출력할 수 있는 검색 기능을 추가해 보았다.
[전체코드]

