# MVC01_9~10 회원리스트 가져오기(묶고(VO)-담고(List)), 회원리스트 보기
## member 테이블 unique key 설정
현재 사용중인 member 테이블은 아래와 같이 생성했다.
create table member (
num int primary key auto_increment,
id varchar(20) not null,
pass varchar(20) not null,
name varchar(30) not null,
age int not null,
email varchar(30) not null,
phone varchar(30) not null
)
여기서 id에 UNIQUE KEY 설정.
PRIMARY KEY 의 경우 중복을 허용하지 않고, NULL도 허용하지 않는 것이다.
create table member (
num int primary key auto_increment,
id varchar(20) not null,
pass varchar(20) not null,
name varchar(30) not null,
age int not null,
email varchar(30) not null,
phone varchar(30) not null,
unique key(id)
)
입력값에 대한 유효성 검사는 프론트에서 자바스크립트 또는 제이쿼리를 이용한다.
## MemberListController.java Servlet 생성
kr.bit.controller 우클릭 > New > Servlet 클릭
Servlet 이름 MemberListController로 설정, URL Mapping의 경우 /memberList.do 로 설정 후 Service만 체크 후 Finish.
### finally
try ~ catch 문에서 finally의 경우 에러 존재유무에 관계 없이 실행.
그래서 해당 부분에 db connection을 종료시켜주는 함수를 넣어준다.
### ArrayList 이용한 리스트 작업
ArrayList에 회원 데이터를 담기 위해 먼저 rs.next(); 를 통해서 데이터 존재 유무를 파악(rs.next()가 True인 경우) .
아래와 같이 코드 작업 진행.
// 회원(VO) 전체 리스트(ArrayList) 가져오기
public ArrayList<MemberVO> memberList() {
String SQL = "select * from member";
getConnect();
ArrayList<MemberVO> list = new ArrayList<MemberVO>();
try {
ps = conn.prepareStatement(SQL);
rs = ps.executeQuery(); // rs -> 커서
while (rs.next()) {
int num = rs.getInt("num");
String id = rs.getString("id");
String pass = rs.getString("pass");
String name = rs.getString("name");
int age = rs.getInt("age");
String email = rs.getString("email");
String phone = rs.getString("phone");
// 묶고
MemberVO vo = new MemberVO(num, id, pass, name, age, email, phone);
// 담고
list.add(vo);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
dbClose();
}
return list;
}
## Member 테이블의 회원 리스트 보기
아래와 같이 list 가져올 Controller 코드 작업 진행
package kr.bit.controller;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import kr.bit.model.MemberDAO;
import kr.bit.model.MemberVO;
@WebServlet("/memberList.do")
public class MemberListController extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1. 클라이언트 요청 받기 (memberList.do)
MemberDAO dao = new MemberDAO();
// 2. 회원 전체 리스트 가져오기(Model 연동)
ArrayList<MemberVO> list = dao.memberList();
// 3. 회원 전체 리스트를 HTML로 만들어서 응답하기
System.out.println(list);
}
}
package kr.bit.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import kr.bit.model.MemberVO;
@WebServlet("/memberInsert.do")
public class MemberInsertController extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
// 1. 파라미터 수집(VO)
String id = request.getParameter("id");
String pass = request.getParameter("pass");
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
String email = request.getParameter("email");
String phone = request.getParameter("phone");
// 파라미터 수집(VO)
//MemberVO vo = new MemberVO(id, pass, name, age, email, phone);
MemberVO vo = new MemberVO();
vo.setId(id);
vo.setPass(pass);
vo.setName(name);
vo.setAge(age);
vo.setEmail(email);
vo.setPhone(phone);
System.out.println("vo : " + vo); // vo.toString() 이 생략되어있는 것.
}
}
## 데이터베이스 연결객체 생성 (Connection)
MemberDAO 에 DB 연결위한 객체 생성
기존에 연결한 MySQL 의 연결 설정을 위해 Data Source Explorer > 기존 MySQL 우클릭 > Properties에서 Driver Properties 클릭 후 여기에 존재하는 URL, User name, password 와 동일하게 MemberDAO에 입력
### 자바 JDBC API (인터페이스)
자바는 모든 데이터베이스에서 사용할 수 있는 JDBC API (인터페이스)를 만들고 해당 API에 구현되어 있는 추상 메서드를 각 데이터베이스 벤더 회사들이 가져가서 구현 클래스 생성. 이 구현 클래스를 Driver 라고 한다.
MySQL 연결을 위한 드라이버 클래스 생성 위해 jar 파일 확인. (mysql-connector-java-5.1.31.jar 사용 예정)
위 파일을 프로젝트 > WebContent > WEB-INF > lib 에 복사.
Data Source Explorer > 기존에 연결한 MySQL 우클릭 > Properties > Driver Properties > Drivers에서 Edit Driver Definition 클릭 후 Properties 탭 확인
Properties 에 있는 Driver Class value를 이용하여 MySQL Driver Loading
실행 시점에서 드라이버를 메모리에 올리는 동적 로딩 활용.
그리고 try ~ catch로 예외처리 하는데, 기존 ClassNotFoundException으로 예외처리하던걸 부모가 예외를 다 잡을 수 있도록 Exception으로 변경.
package kr.bit.model;
import java.sql.*;
// JDBC -> myBatis, JPA
public class MemberDAO {
private Connection conn;
private PreparedStatement ps;
private ResultSet rs;
// 데이터베이스 연결 객체 생성
public void getConnect() {
String URL = "jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8&serverTimeZone=UTC";
String user = "root";
String password = "1234";
// MySQL Driver Loading
try {
// 동적 로딩.
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(URL, user, password);
} catch (Exception e) {
e.printStackTrace();
}
}
}