package model;
import java.sql.*; //SQL 패키지인지 반드시 확인
import java.util.Vector;
//*을 쓰면 sql에 있는 패키지를 모두 가져오기 때문에 따로 안써도 된다.
//오라클 데이터 베이스에 연결하고 SELECT, INSERT, UPDATE, DELETE 작업을 실행해주는 클래스입니다.
public class MemberDAO {
// 아이디,비밀번호 사용해서 연결하는 부분은 반복적으로 계속 사용하므로 메소드로 만드는 것이 좋다.
// 오라클에 접속하는 소스를 작성
String id = "system";
String pass = "123456";
String url = "jdbc:oracle:thin:@localhost:1521:XE"; // 접속 URL
Connection con; // 데이터베이스에 접근할수 있도록 설정
PreparedStatement pstmt; // 데이터베이스에서 쿼리를 실행시켜주는 객체
ResultSet rs; // 데이터베이스의 테이블의 결과(SELECT, INSERT, UPDATE, DELETE 등)
// 데이터베이스의 테이블의 결과를 리턴받아 자바에 저장해주는 객체
// 데이터베이스에 접근할 수 있도록 도와주는 메소드
public void getCon() {
try {
// 1.해당 데이터베이스를 사용한다고 선언 (클래스를 등록 = 오라클을 사용)
Class.forName("oracle.jdbc.driver.OracleDriver");
// 2. 해당 데이터 베이스에 접속
con = DriverManager.getConnection(url, id, pass);
// con 앞에 Connection을 쓰면 메소드의 지역변수에 저장이 되기때문에 쓰지 않는다
} catch (Exception e) {
}
}
// 데이터베이스에 한사람의 회원 정보를 저장해주는 메소드
public void insertMember(MemberBean mbean) {
try {
getCon();
// 3. 접속후 쿼리준비하여 쿼리를 사용하도록 설정
String sql = "insert into member values(?,?,?,?,?,?,?,?)"; // 8개의 값이 들어간다.
// 쿼리를 사용하도록 설정
PreparedStatement pstmt = con.prepareStatement(sql); // jsp 에서 쿼리를 사용하도록 설정
// ?에 맞게 데이터를 맵핑
pstmt.setString(1, mbean.getId()); // SQL의 insert to values에 넣을 값들.
pstmt.setString(2, mbean.getPass1());
pstmt.setString(3, mbean.getEmail());
pstmt.setString(4, mbean.getTel());
pstmt.setString(5, mbean.getHobby());
pstmt.setString(6, mbean.getJob());
pstmt.setString(7, mbean.getAge());
pstmt.setString(8, mbean.getInfo());
// 4. 오라클에서 쿼리를 실행 하시오.
pstmt.executeUpdate(); // insert, update, delete 시 사용하는 메소드
// 5. 자원 반납
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
// 모든 회원의 정보를 리턴해주는 메소드 호출
// 아까 벡터로 받았기 때문에 리턴타입을 Vector<MemberBean>로 사용한다.
// 회원가입을 했을 때 자료는 bean클래스에 일단 저장하고 다시 벡터에 저장 (반복한다)
public Vector<MemberBean> allSelectMember() {
// 가변길이로 데이터를 저장
Vector<MemberBean> v = new Vector<>();
// 무조건 데이터 베이스는 예외처리를 해야된다.
// 무조건 예외처리를 해야될때 (데이터베이스, 네트워크, 스레드, 입출력)
try {
// 커넥션 연결 (getCon() 메소드를 호출해서 데이터베이스와 연결)
getCon();
// 쿼리 준비
String sql = "select * from member";
// 쿼리를 실행시켜주는 객체 선언
pstmt = con.prepareStatement(sql);
// 쿼리를 실행 시킨 결과를 리턴해서(오라클 테이블의 검색된 결과를 자바객체에 저장)
rs = pstmt.executeQuery(); // 데이터베이스의 쿼리를 실행한 데이터가 rs에 저장된다.
// 반복문을 사용해서 rs에 저장된 데이터를 추출해놓아야 한다.
while (rs.next()) // 저장된 데이터만큼 반복문 실행한다는 뜻
{
MemberBean bean = new MemberBean(); // 데이터베이스에서 멤버빈클래스로 데이터를 받아야 하기 때문에 객체 생성
bean.setId(rs.getString(1)); // 컬럼으로 나뉘어진 데이터를 빈클래스에 저장, 계속 데이터를 넣어야 하기때문에 새로운 객체를 계속 만들어야함
bean.setPass1(rs.getString(2));
bean.setEmail(rs.getString(3));
bean.setTel(rs.getString(4));
bean.setHobby(rs.getString(5));
bean.setJob(rs.getString(6));
bean.setAge(rs.getString(7));
bean.setInfo(rs.getString(8));
// 패키징된 memberbean 클래스를 벡터에 저장
v.add(bean); // 벡터에 0번지부터 순서대로 데이터가 저장
}
// 자원 반납
con.close();
} catch (Exception e) {
}
// 다 저장된 벡터를 리턴
return v;
}
}