M (Model) : 데이터 처리 담당 

V (View) : 사용자가 보게 될 화면 담당 (출력 및 입력)

C (Controller) : 사용자의 요청 처리해주는 담당 

 

 EX ) 회원관리 프로그램 

oracle 의 MEMBER 테이블과 연동하여 회원관리 프로그램 만들기 

1. oracle 의 MEMBER 테이블을 참조하여 이클립스 Model.vo 패키지에  Member 클래스 생성

 

2. View 패키지에 사용자가 보게될 메인 메뉴 출력

public class MemberMenu {
	private Scanner sc = new Scanner(System.in);
	private MemberController mc = new MemberController();
	
	/**
	 * 사용자가 보게될 첫 화면 (메인화면)
	 */
	public void mainMenu() {
		
		while(true) {
			System.out.println("\n==== 회원 관리 프로그램 ===");
			System.out.println("1. 회원 추가 ");
			System.out.println("2. 회원 전체 조회");
			System.out.println("3. 회원 아이디 검색");
			System.out.println("4. 회원 이름으로 검색");
			System.out.println("5. 회원 정보 변경");
			System.out.println("6. 회원 탈퇴");
			System.out.println("0. 프로그램 종료");
			
			System.out.print(">> 메뉴선택 : ");
			int menu = sc.nextInt();
			sc.nextLine();
			
			switch(menu) {
			case 1 : inputMember(); break;
			case 2 : mc.selectList(); break;
			case 3 : String userId = inputMemberId(); 
	                 mc.selectByUserId(userId);
                     break;
			case 4 : String keyword = inputMemberId();
                       mc.selectByUserName(keyword);
                     break;
			case 5 : updateMember(); break;
			case 6 : mc.deleteMember(inputMemberId()); break;
			case 0 : System.out.println("\n이용해 주셔서 감사합니다. 프로그램을 종료합니다."); return;
			default :System.out.println("\n메뉴를 잘못 입력했습니다. 다시 입력해주세요.");
				
			}
			
		}
		
	}

1_1. View ) 회원 추가 메뉴 ( 추가하고자 하는 회원의 정보 입력받아 추가요청 보냄)

public void inputMember() {
		 System.out.println("\n==== 회원 추가 ====");
		 //아이디~취미 입력 받기 
		 System.out.print("회원 아이디: ");
		 String userId = sc.nextLine();
		 
		 System.out.print("비밀번호 : ");
		 String userPwd = sc.nextLine();
		 
		 System.out.print("이름: ");
		 String userName = sc.nextLine();
		 
		 System.out.print("성별(M/F): ");
		 String gender = sc.nextLine().toUpperCase();
		 
		 System.out.print("나이 : ");
		 String age = sc.nextLine();   // 문자열 "19"	
		 
		 System.out.print("이메일 : ");
		 String email = sc.nextLine();
		 
		 System.out.print("휴대폰번호('-'제외 입력): ");
		 String phone = sc.nextLine();
		 
		 System.out.print("주소 : ");
		 String address = sc.nextLine();
		 
		 System.out.print("취미(,로 연이어 작성) : ");
		 String hobby = sc.nextLine();
		 
		 //회원 추가 요청 == Controller 메소드 호출
		 mc.insertMember(userId,userPwd,userName,gender,age,email,phone,address,hobby);

 

1_2.  Controller) 사용자에게 입력받은 값을 MemberDao로 전달하고 , 그 결과를 도출해서 다시 View로 전달해서 출력 

public void insertMember(String userId,String userPwd, String userName, 
							String gender,String age,String email, 
							String phone,String address, String hobby) {
	
		Member m = new Member(userId,userPwd,userName,gender,Integer.parseInt(age),email,phone,address,hobby);
		// age를 String형으로 입력받았으니 생성자생성시에는 int형으로 파싱 
		
		int result = new MemberDao().insertMember(m);
		
		//성공인지, 실패인지 판단 
		if(result > 0 ) {
			new MemberMenu().displaySuccess("성공적으로 회원이 추가되었습니다.");
		}else {
			new MemberMenu().displayFail("회원 추가를 실패했습니다.");
		}
	}

 

1_3. Dao) Controller로 부터 사용자가 입력한 값을 객체로 전달받은 후 JDBC과정을 거쳐 결과값(처리된 행수)을  반환 

public int insertMember(Member m) {
		//insert문 ==> 처리된 행수 (int) ==> 트랜잭션 처리 
		
		int result = 0;
		Connection conn = null;
		Statement stmt = null;
		
		// 실행할 sql문 (완성형태로 만들기=> Statement객체 : sql문이 완성형태여야만 실행)
		String sql = "INSERT INTO MEMBER VALUES(SEQ_USERNO.NEXTVAL, "
				+ "'" + m.getUserId() +"', "
				+ "'" + m.getUserPwd() +"', " 
				+ "'" + m.getUserName()+"', "
				+ "'" + m.getGender() + "', "
				+       m.getAge() + ", "
				+ "'" + m.getEmail() + "', "
				+ "'" + m.getPhone() + "', "
				+ "'" + m.getAddress() + "', "
				+ "'" + m.getHobby() + "', SYSDATE)";
				
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","JDBC","JDBC");
			stmt = conn.createStatement();
			result = stmt.executeUpdate(sql);
			
			if(result > 0) {
				conn.commit();
			}else {
				conn.rollback();
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				stmt.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return result; // 1(성공) 아니면 0 (실패)반환 
	}

1_4. View )  서비스요청처리 후 결과를 출력할 응답화면

public void displaySuccess(String message) {
		System.out.println("\n 서비스 요청 성공 : "+ message);
	}
public void displayFail(String message) {
		System.out.println("\n 서비스 요청 실패 : "+ message);
	}

 

 

2_1. View) 회원 전체 조회 메뉴 : 입력받을 값이 없으므로 바로 Controller호출

2_2 . Controller)  Dao를 호출하고 그값을 ArrayList에 돌려받은 후 , 조회결과 성공 유무를 판단해 View에 전달 

public void selectList() {
		ArrayList<Member> list = new MemberDao().selectList();
		
		// 조회 결과가 있는지 없는지 판단 후 => 사용자가 보게될 응답 뷰 지정
		if(list.isEmpty()) {// 조회결과 없을 경우 
			 new MemberMenu().displayNoData("전체 조회 결과가 없습니다.");
		}else { // 조회결과가 있을 경우 
			new MemberMenu().displayMemberList(list);
		}
		
	}

2_3. Dao) JDBD과정을 통해 받은 결과를 객체에 담은 후 ArrayList에 옮겨담아  List를 다시 Controller로 전달 

public ArrayList<Member> selectList() {
	//select문 (여러행 조회)  => ResultSet 객체 => java객체(ArrayList)에 옮겨담기 
		
	ArrayList<Member> list = new ArrayList<>(); //텅빈리스트
	Connection conn = null;
	Statement stmt = null;
	ResultSet rset = null;
		
	String sql = "SELECT * FROM MEMBER";
		
	try {
		Class.forName("oracle.jdbc.driver.OracleDriver");
		conn= DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","JDBC","JDBC");
		stmt = conn.createStatement();
		rset = stmt.executeQuery(sql);
			
	while(rset.next()) {
		//현재 rset의 커서가 가리키고있는 해당 행의 모든 컬럼값을 뽑아서 Member객체에 담기 
	Member m = new Member(rset.getInt("user_no"),
                        rset.getString("user_id"),
                        rset.getString("user_pwd"),
                        rset.getString("user_name"),
                        rset.getString("gender"),
                        rset.getInt("age"),
                        rset.getString("email"),
                        rset.getString("phone"),
                        rset.getString("address"),
                        rset.getString("hobby"),
                        rset.getDate("enroll_date"));
			list.add(m);
		}
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				rset.close();
				stmt.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return list;  // 조회된 결과 없으면 텅빈리스트 | 조회결과 있으면 결과가 담긴 리스트 
	}

2_4) 서비스 요청 조회결과를 출력하는 응답화면
List가 비어있을경우(조회된 결과가 없을경우)  :  데이터 없음 메시지 출력 
List가 채워져있을경우( 조회된 결과가 있을경우) : 반복문을 통해 list 전체를 출력

public void displayNoData(String message) {
		System.out.println("\n" + message);
	}
public void displayMemberList(ArrayList<Member> list) {
		System.out.println("\n조회된 데이터는 다음과 같습니다.");
		
		for(int i =0; i<list.size();i++) {
			System.out.println(list.get(i));
		}

 

'JDBC' 카테고리의 다른 글

JDBC 03 _ mvc 패턴 이용한 JDBC_Prepared Statement  (0) 2022.12.05
JDBC 02 _ mvc 패턴 이용한 JDBC Statement(2)  (0) 2022.12.01
JDBC 01 _ delete문  (0) 2022.11.30
JDBC 01 _ update문  (0) 2022.11.30
JDBC 01 _ 여러행 select문 조회  (0) 2022.11.30
복사했습니다!