MVC 패턴(Model-View-Controller) 패턴으로 웹사이트의 회원가입페이지를 구현할것이다.
그중 Model-데이터 처리하는 자바파일을 정리!
DB와 연동을 해야하니깐 파일명은 DBBean.java...
DB는 오라클로 함.
String jdbc_driver = "oracle.jdbc.driver.OracleDriver";
String jdbc_url="jdbc:oracle:thin:@localhost:1521:xe";
package member;
/*
* 빈즈클래스의 조건 - 멤버변수, 멤버변수 각 당 겟터/셋터 메소드가 있어야함.
* getter:리턴값 받아온거 , setter:초기화 시키는것
*
*/
import java.sql.*;
import java.util.*;
public class DBBean {
//멤버변수(프로퍼티,중간 저장소)
private String mem_id;
private String mem_passwd;
private String mem_name;
private String mem_nickname;
private String mem_email_id;
private String mem_email_domain; // 이메일 도메인
private String mem_num1; // 주민번호 앞 6자리
private String mem_num2; // 주민번호 뒷 7자리
private String mem_phone;
private String mem_gender;
private int mem_birthday1; //출생년도
private int mem_birthday2; //출생 월
private int mem_birthday3; //출생 일
private String mem_job; //직업
private String zipcode; //우편번호
private String useraddr1; //주소
private String useraddr2; //상세주소
private String useraddr3; //주소 참고항목
//오라클 DB 연동에 관련된 객체 참조 변수 선언
Connection conn = null; // 오라클 DB연동을 하는 객체
PreparedStatement pstmt = null; // sql
ResultSet rs = null; // 결과물
//오라클 JDBC(자바 데이터베이스 커넥션) 연동을 위한 driver와 url 필요
String jdbc_driver = "oracle.jdbc.driver.OracleDriver";
String jdbc_url="jdbc:oracle:thin:@localhost:1521:xe";
//DB 연동 메소드 구현 - 정형화된 소스, 외우기!!!
public void connect() {
try{
Class.forName(jdbc_driver);
conn = DriverManager.getConnection(jdbc_url, "---", "---"); // 디비계정이름과 비번 입력
}catch(Exception e){
System.out.println("connect():" + e);
}
}
//DB 연동 종료 메소드 구현
public void disconnect() {
try{
pstmt.close(); //자원해체
conn.close();
rs.close();
}catch(Exception e){
System.out.println(e);
}
}
// 아이디 중복체크 메소드 구현
public int confirmId(String mem_id) {
connect();
int idDuplication = 0; //아이디 중복 여부 체크 변수
//위에 int로 리턴값을 받기로했으니 int의 변수가 있어야해서 만듬,지역변수는 초기값=0;
try { //DB처리는 무조건 다 예외처리를 만들어야함.
String Confirmed_SELECT
= "select mem_id from member where mem_id=?"; // =? 보안강화방식
// select mem_id from member where mem_id=--- → 계정아이디로 테스트를 할예정임으로
pstmt = conn.prepareStatement(Confirmed_SELECT);
// repareStatement 객체만들떄, conn(오라클연동객체)로 연결해야함.
pstmt.setString(1, mem_id);
//설정시 set어쩌고(1은 첫번째 물음표를 지칭함, 넘겨받은 데이터값)
rs = pstmt.executeQuery(); //셀렉트 문장을 실행해라
//executeQuery는 셀렉트할때만 호출=테이블에 수정이 없을때
//테이블에 수정이 될때 명령어 executeUpdate
if(rs.next()) {
idDuplication = 1; // 아이디가 중복인 경우
}else{
idDuplication = -1; // 사용가능한 아이디인 경우
}
}
catch(Exception e) {
System.out.println("confirmId(): " + e);
//어떤메소드의 실행할때 에러가 나는지 바로 알수있다.
}
finally {
disconnect();
}
return idDuplication;
} // end confirmId()
// 회원가입 폼에서 입력한 데이터들은 member테이블에 저장하는 메소드 구현
public boolean insertDB() {
connect();
try{
String member_insert
= "insert into member values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
pstmt = conn.prepareStatement(member_insert);
String mem_email = mem_email_id + "@" + mem_email_domain;
pstmt.setString(1, mem_id);
pstmt.setString(2, mem_passwd);
pstmt.setString(3, mem_name);
pstmt.setString(4, mem_nickname);
pstmt.setString(5, mem_email);
pstmt.setString(6, mem_num1);
pstmt.setString(7, mem_num2);
pstmt.setString(8, mem_phone);
pstmt.setString(9, mem_gender);
pstmt.setInt(10, mem_birthday1);
pstmt.setInt(11, mem_birthday2);
pstmt.setInt(12, mem_birthday3);
pstmt.setString(13, mem_job);
pstmt.setString(14, zipcode);
pstmt.setString(15, useraddr1);
pstmt.setString(16, useraddr2);
pstmt.setString(17, useraddr3);
pstmt.executeUpdate(); //member테이블에 데이터들 insert하는 작업이 이루어진다!!
}catch(Exception e) {
System.out.println("insertDB() " + e);
}finally {
disconnect();
} return(true); //정상적으로 입력이 되면 true로 리턴된다.
}
멤버변수 1개당 getter,setter 셋팅...
}
설명: 이전 글인 아이디 중복체크하는 기능과 이어진다. 값1이 나올때 중복아이디, -1값은 사용가능한 아이디!!
중복메소드 구현하는 소스 쪽을 보면 마지막에 disconnect(); DB연동 종료인 자원해체하는 메소드를 썼는데
try-catch-finally의 finally문에서 자원해제를 안만들고 따로 빼서 자원해체메소드를 만들었다.
총4개의 메소드 중 마지막인 DB테이블에 저장하는 메소드가 가장 어려웠다...
우선 회원가입의 기본적인 멤버변수가 17개라서 값 ?를 17개를 나열한다.
다만 이메일은 앞 @ 뒤 로 나눠지게 해놔서 데이터를 저장할때는 앞뒤 값을 붙여서 하나의 값으로 만든다 (mem_email에 저장!)
executeUpdate() -> 데이터에 수정이 있으니 마지막에 작성~
다음에는 데이터 입력/성공했을 시 페이지이동하는 글에 대해 올려야지..
mvc패턴의 컨트롤러 역할에 대한 글!!!