[MVC패턴-실습]회원가입 만들기-2. model.java파일 만들기

J의 괴발 공부·2023년 8월 11일
0

java

목록 보기
7/13

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패턴의 컨트롤러 역할에 대한 글!!!

profile
괴발자가 될것인가, 개발자가 될것인가?

0개의 댓글