본문 바로가기
기초 및 언어/▶ Java&JSP

11. JSP + JDBC Select 예제1 _ member

by 류딩이 2025. 9. 11.

📌 JSP + JDBC Select 예제 정리

 

1. 사용한 파일

  • select.jsp
    👉 웹 브라우저에서 호출되는 시작 JSP, MemberDao를 불러와 DB 데이터 조회 후 테이블 출력
  • MemberDao.java
    👉 DB 연결, SQL 실행, 결과를 ArrayList<MemberBean> 형태로 반환하는 DAO 클래스
  • MemberBean.java
    👉 DB에서 꺼낸 데이터를 저장하는 VO/Bean 클래스 (DTO 역할)

2. 실행 흐름 (페이지 이동 순서)

  1. 브라우저에서 select.jsp 요청
    • http://localhost:8080/프로젝트명/select.jsp
  2. select.jsp 내부 실행
    • <jsp:useBean id="mdao" class="myPkg.MemberDao"/>
      👉 DAO 객체 생성
    • mdao.getAllMembers() 호출
      👉 DB에서 member 테이블 데이터 가져옴
  3. MemberDao 동작
    • getAllMembers() 실행
      1. getConnection() 으로 DB 연결
      2. select * from member order by num 실행
      3. ResultSet → MemberBean 객체로 변환 후 ArrayList에 저장
      4. DB 자원 닫고 ArrayList 반환
  4. select.jsp로 결과 전달
    • ArrayList<MemberBean>을 for문으로 반복 출력
    • HTML <table>에 회원정보 표시
    • 각 행마다 [수정] / [삭제] 링크 생성
  5. 사용자 추가 동작
    • [수정] 클릭 → updateForm.jsp?num=해당번호 로 이동
    • [삭제] 클릭 → deleteProc.jsp?num=해당번호 로 이동
    • [삽입폼] 클릭 → insertForm.jsp 로 이동

3. 실행 순서 (JSP → DAO → DB)

브라우저 요청 (select.jsp)
          ↓
select.jsp 실행
          ↓
<jsp:useBean> 으로 MemberDao 객체 생성
          ↓
mdao.getAllMembers() 호출
          ↓
MemberDao 내부
└─ getConnection() → DB 접속
└─ SQL 실행 : "select * from member order by num"
└─ while(rs.next()) → MemberBean 생성 → ArrayList에 add
└─ 자원 닫기 (rs, ps, conn)
        ↓
ArrayList<MemberBean> 리턴
        ↓
select.jsp에서 for문으로 HTML 테이블에 출력

4. 화면 예시 (select.jsp 실행 시)

번호  아이디  비번  이름  가입일  수정  삭제
1 hong 1234 홍길동 2025-09-11 [수정] [삭제]
2 kim abcd 김철수 2025-09-11 [수정] [삭제]

5. 핵심 포인트

  • MemberBean : 1행(레코드)을 객체로 저장
  • ArrayList<MemberBean> : 전체 행을 모아 반환
  • DAO 패턴 : DB 로직은 DAO, 출력은 JSP가 담당 (역할 분리)
  • 자원 정리 : finally 블록에서 rs, ps, conn 닫기

📌 JSP + JDBC Select 예제 정리

1. select.jsp (조회 페이지)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<%@ page import="myPkg.*" %>

<style type="text/css">
	table {
		width : 700px;
		margin : auto;
		text-align: center;
	}
</style>

<!-- 1. DAO 객체 생성 -->
<jsp:useBean id="mdao" class="myPkg.MemberDao"/>

<%
	// 2. DB에서 전체 회원 조회 (DAO 호출)
	ArrayList<MemberBean> lists = mdao.getAllMembers();
%>

<h1>member 테이블 조회</h1>

<!-- 3. 조회 결과를 HTML 테이블로 출력 -->
<table border="1">
	<tr>
		<th>번호</th>
		<th>아이디</th>
		<th>비번</th>
		<th>이름</th>
		<th>가입일</th>
		<th>수정</th>
		<th>삭제</th>
	</tr>
	<% 
		// 4. ArrayList 반복 출력
		for(int i=0; i<lists.size(); i++){ 
	%>
	<tr>
		<td><%= lists.get(i).getNum() %></td>
		<td><%= lists.get(i).getId() %></td>
		<td><%= lists.get(i).getPasswd() %></td>
		<td><%= lists.get(i).getName() %></td>
		<td><%= lists.get(i).getRegister() %></td>
		<!-- 수정/삭제는 num 값 전달 -->
		<td><a href="updateForm.jsp?num=<%=lists.get(i).getNum()%>">수정</a></td>
		<td><a href="deleteProc.jsp?num=<%=lists.get(i).getNum()%>">삭제</a></td>
	</tr>
	<% } %>
</table>

<br>
<!-- 5. 회원 추가 페이지로 이동 -->
<a href="insertForm.jsp">삽입폼</a>

 

포인트

  • <jsp:useBean> : JSP에서 Java 객체를 생성
  • getAllMembers() : DAO에서 DB select 실행 후 ArrayList 반환
  • for문으로 리스트를 테이블 형태로 출력

2. MemberDao.java (DAO 클래스)

package myPkg;

import java.sql.*;
import java.util.ArrayList;

public class MemberDao {
	// DB 접속 정보
	String driver = "oracle.jdbc.driver.OracleDriver";
	String url = "jdbc:oracle:thin:@localhost:1521:orcl";
	String id = "sqlid";
	String pw = "sqlpw";
	
	Connection conn = null;
	PreparedStatement ps = null;
	ResultSet rs = null;
    
    // 1. 생성자: 드라이버 로드
    public MemberDao() {
    	try {
			Class.forName(driver);
			System.out.println("드라이버 로드 성공");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
    }
    
    // 2. DB 연결
    public void getConnection() {
    	try {
			conn = DriverManager.getConnection(url, id, pw);
			System.out.println("접속 성공");
		} catch (SQLException e) {
			e.printStackTrace();
		}
    }
    
    // 3. 전체 회원 조회 메서드
    public ArrayList<MemberBean> getAllMembers(){
    	ArrayList<MemberBean> lists = new ArrayList<MemberBean>();
    	getConnection(); // DB 연결
		try {
			// SQL 준비 및 실행
			String sql = "select * from member order by num";
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			
			// 4. 결과 집합(ResultSet) 반복 처리
			while(rs.next()) {
				int num = rs.getInt("num");
				String id = rs.getString("id");
				String passwd = rs.getString("passwd");
				String name = rs.getString("name");
				String register = String.valueOf(rs.getDate("register"));
				
				// 한 줄(Row)을 Bean 객체에 저장
				MemberBean mb = new MemberBean(num,id,passwd,name,register);
				
				// ArrayList에 추가
				lists.add(mb);
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			// 5. 자원 반납
			try {
				if(ps != null) ps.close();
				if(rs != null) rs.close();
				if(conn != null) conn.close();
			} catch(SQLException e) {
				e.printStackTrace();
			}
		}
    	// 6. 리스트 반환
    	return lists;
    }
}

 

포인트

  • getAllMembers() : DB → ResultSet → MemberBean 변환 → ArrayList로 반환
  • finally 블록 : 자원 반납 (메모리 누수 방지)
  • DAO 패턴 : DB 로직은 JSP가 아닌 DAO에서만 처리

3. MemberBean.java (데이터 저장용 Bean)

package myPkg;

// 1. member 테이블의 한 행(Row)을 담는 클래스
public class MemberBean {
	private int num;
	private String id;
	private String passwd;
	private String name;
	private String register;
	
	// 2. 기본 생성자
	public MemberBean() {}
	
	// 3. 모든 컬럼을 받는 생성자
	public MemberBean(int num, String id, String passwd, String name, String register) {
		this.num = num;
		this.id = id;
		this.passwd = passwd;
		this.name = name;
		this.register = register;
	}
	
	// 4. Getter / Setter (캡슐화된 데이터 접근)
	public int getNum() { return num; }
	public void setNum(int num) { this.num = num; }
	
	public String getId() { return id; }
	public void setId(String id) { this.id = id; }
	
	public String getPasswd() { return passwd; }
	public void setPasswd(String passwd) { this.passwd = passwd; }
	
	public String getName() { return name; }
	public void setName(String name) { this.name = name; }
	
	public String getRegister() { return register; }
	public void setRegister(String register) { this.register = register; }
}

포인트

  • 한 명의 회원 데이터를 담는 클래스
  • JSP와 DAO 사이의 데이터 전달 객체(DTO, VO) 역할
  • getter/setter 로 캡슐화된 데이터 접근

 

사용한  sql

drop table member;
drop sequence m_seq;

create table member(
	num number primary key,
	id varchar2(10) not null,
	passwd varchar2(10) not null,
	name varchar2(10) not null,
	register date default sysdate
);

create sequence m_seq
	increment by 1
	start with 1 
	minvalue 1
	maxvalue 10000
	nocache;

insert into member(num,id,passwd,name)
 values(m_seq.nextval,'IU','111','아이유');

commit; 

col id for a10
col passwd for a10
select * from member;

✅ 전체 실행 순서 정리 (주석 기준)

  1. JSP 실행 (select.jsp)
    → DAO 객체 생성 → getAllMembers() 호출
  2. DAO 동작 (MemberDao)
    → DB 연결 → SQL 실행 → ResultSet 반복 → Bean 생성 & ArrayList 저장 → 반환
  3. JSP 출력
    → ArrayList 반복 → HTML 테이블에 표시