[jsp] jsp에서 DB 테이블 select 하기 / ArrayList

seulki·2022년 10월 19일
0

jsp

목록 보기
36/51
post-custom-banner

🎈레코드가 여러 개인 테이블 select하기

  • age_search.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="age_db.jsp">
		<label>이름 <input type="text" name="name"> </label><br>
		<input type="submit">
	</form>
	<input type="button" value="전체 확인하기" onclick="selectAll();">
</body>
<script>
	function selectAll() {
		location.href = "age_all.jsp";
	}
</script>	
</html>
  • 전체 확인하기 클릭하면 member 테이블의 모든 값 출력하기
  • selectAll() -> age_all.jsp 로 이동


🗝️ DBConnection 객체와 MemberDAO 객체 생성 보러가기!



🎈MemberDAO.java

package com.koit.web.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import com.koit.web.beans.MemberBean;

public class MemberDAO { //DB 접근
	
	    Connection conn;
	    PreparedStatement pstm;
	    ResultSet rs ;
	    
	    public int getAge(String name) {
	    	int age = 0;
	    	
	    	String sql = "SELECT AGE FROM MEMBER WHERE NAME = ?";
	    	try {
	    		conn = DBConnection.getConnection();
				pstm = conn.prepareStatement(sql);
				pstm.setString(1, name);
				rs = pstm.executeQuery();
								
				if(rs.next()) {
					age = rs.getInt(1);
				}
			} catch (SQLException e) {
				e.printStackTrace();
			} catch (Exception e) {
				e.printStackTrace();
			}
	    		
	    	return age;
	    }
	    
	    public ArrayList<MemberBean> member (){
			
	    	String sql = "SELECT * FROM MEMBER";
	    	ArrayList<MemberBean> arrMember = new ArrayList<>();
	    	
	    	 try {
	    		conn = DBConnection.getConnection();
				pstm = conn.prepareStatement(sql);
				rs = pstm.executeQuery();
				
				while(rs.next()) {
					MemberBean member = new MemberBean();
					member.setName(rs.getString(1));
					member.setAge(rs.getInt(2));
					arrMember.add(member);
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}	    	 
 	 
	    	return arrMember;
	
	    }
	}
  1. 모든 member 테이블의 레코드를 가져오기 위해서는 값을 저장할 빈즈 객체에 테이블의 정보를 담아서, 각각의 빈즈 객체를 ArrayList에 담아야한다.

  2. 빈즈 객체를 담을 arrMember 객체를 생성한다.

  3. DB 에서 쿼리문을 처리해주고 rs에 데이터 값을 담아온다.


  4. while문을 돌면서 빈즈객체를 생성하고 , 그 빈즈를 ArrayList arrMember에 담는다.

  5. 모든 빈즈 객체를 담은 arrMember를 리턴받는다.


🎈 age_all.jsp

<%@page import="com.koit.web.beans.MemberBean"%>
<%@page import="java.util.ArrayList"%>
<%@page import="com.koit.web.dao.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<jsp:useBean id="udao" class="com.koit.web.dao.MemberDAO"/>
	
	<table border="1">
		<tr>
			<td>이름</td>
			<td>나이</td>
		</tr>
		<% 
			for(int i = 0; i < udao.member().size(); i++){
		%>  
			<tr>
				<td><%=udao.member().get(i).getName() %></td>
				<td><%=udao.member().get(i).getAge() %></td>
			</tr>
		<%
		}
		%>
		
	 </table>
</body>
</html>
  1. DB 와 커넥션, 쿼리문 처리를 할 MemberDAO 객체 생성
  2. DAO 객체인 udao의 ArrayList로 리턴받을 member() 메서드의 사이즈 만큼 for문을 돌려 각각의 빈즈객체에 접근
  3. ArrayList의 인덱스마다 값을 getter로 가져와서 출력!



🗝️ 간략하게 정리 한 코드

<%@page import="com.koit.web.beans.MemberBean"%>
<%@page import="java.util.ArrayList"%>
<%@page import="com.koit.web.dao.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<jsp:useBean id="udao" class="com.koit.web.dao.MemberDAO"/>
	
	<table border="1">
		<tr>
			<td>이름</td>
			<td>나이</td>
		</tr>
		<% 
			ArrayList<MemberBean> result = udao.member();
			for(MemberBean member : result){
		%>  
			<tr>
				<td><%=member.getName() %></td>
				<td><%=member.getAge() %></td>
			</tr>
		<%
		}
		%>
	 </table></br>
		<input type="button" value="다시 검색하기" onclick="location.href='age_search.jsp'"/>
</body>
</html>
  • 리턴값을 받는 ArrayList 선언하여 변수명으로 사용
  • for each문 사용
  • 처음 화면으로 돌아가는 버튼 생성
profile
웹 개발자 공부 중
post-custom-banner

0개의 댓글