본문 바로가기
{"CODING": undefind};/JAVA

[도서관리 프로그램(java 콘솔구현) 1-3] 회원탈퇴

by 잼잼미 2021. 7. 17.

구현된 회원탈퇴 부분

 

회원탈퇴는 로그인 되어있는 상태에서만 접근 가능한 메뉴이다.

로그인 되어있는 아이디의 비밀번호를 체크 후, 비밀번호가 맞을 경우에 탈퇴 가능하다.

 

1) TotalController

 

// ------ *** 회원 탈퇴하기 *** --------
private userDTO leaveMember(userDTO user,Scanner sc) {

  System.out.print("\n>>> 회원탈퇴하기 <<<\n");

  String userid=user.getUserid().toString();
  String passwd="";

  boolean bool=udao.checkUserid(userid);

  do{
    System.out.print("▶비밀번호 확인: ");
    passwd=sc.nextLine();

    if(!passwd.equals(user.getPasswd())) {
    	System.out.println("\n>> 비밀번호가 틀렸습니다. 다시 입력해주세요.<<");
    }
    else {
    	break;
    }
  }while(true);
  
  if(bool==true) {

    do {
      Connection conn = ProjectDBConnection.getConn();

      System.out.print("\n▷ 정말로 탈퇴하시겠습니까?[Y/N] "); 
      String yn = sc.nextLine();

      try {
        int n=udao.leaveMember(userid); // 회원탈퇴하기

        if("y".equalsIgnoreCase(yn)) {   
          if(n!=1) {
              System.out.println(">>>> 대여중인 도서가 있므로 탈퇴 불가!! <<<<");
              break;
          }

          conn.commit(); // 커밋 
          System.out.println(">> 회원 탈퇴 성공!! << \n");
          user = null;
          break;
        }

        else if("n".equalsIgnoreCase(yn)) {
          conn.rollback(); // 롤백 
          System.out.println(">> 회원 탈퇴 취소!! << \n");
          break;
          }

        else {
          System.out.println(">> Y 또는 N 만 입력하세요!! << ");
        }

      } catch (SQLException e) {
        e.printStackTrace();
      }
  	} while (true);
  }// end of if(bool==true)------------------------------------
  return user;
}// end of private userDTO leaveMember(userDTO user,Scanner sc)-----

 

1-1) 비밀번호를 입력받아 접속중인 id의 비밀번호와 일치하는지 확인

1-2) userDAO의 leaveMember 메소드 실행

1-3) leaveMember 메소드 실행 후, 탈퇴 확인. 탈퇴를 동의하면 commit, 동의하지 않으면 rollback

 

2) userDAO

 

// 회원id가 존재하는지 체크하는 메소드
@Override
public boolean checkUserid(String userid) {
  boolean b = false;

  try {
    conn = ProjectDBConnection.getConn();

    String sql = "select userid "+
                "from lib_member "+
                "where userid = ? ";

    pstmt = conn.prepareStatement(sql);
    pstmt.setString(1, userid);

    rs = pstmt.executeQuery();

    if(rs.next()) {
    	b=true;
    }

  }catch(SQLException e) {
  	System.out.println("SQL 구문이 잘못되었습니다");
  }finally {
  	close();
  }

  return b;
}

 

2-1) TotalController에서 넘어온 id를 pstmt 객체를 생성해

작성된 sql 문을 오라클 서버에 보내 실행되도록 한다.

2-2) SQL 문이 DQL문(select)이므로 .executeQuery();이고,

pstmt.executeQuery(); 을 실행하면 select 되어진 결과물을 ResultSet으로 가져온다.

2-3) rs의 값이 존재하면 boolean 값을 true로 설정하고, 이 값을 return한다.

 

 

 

// 회원 탈퇴 메소드
@Override
public int leaveMember(String userid) {
  int result = 0;

  try {
    conn = ProjectDBConnection.getConn();

    String sql = " delete from lib_member "
    + " where userid = ? and totalrent=0 ";

    pstmt = conn.prepareStatement(sql);
    pstmt.setString(1, userid);

    result = pstmt.executeUpdate();
  } catch (SQLException e) { 
  	e.printStackTrace();
  } finally {
  	close();
  }      
  return result;
}

 

2-4) 회원탈퇴는 SQL 문이 DML문(delete)이므로 .executeUpdate();이고,

pstmt.executeUpdate(); 을 실행하면 해당하는 userid가 totalrent 값이 0일 경우에만 database에서 delete 한다.

2-5) SQL문이 성공적으로 실행되면 result의 값은 1이 되며, 1을 리턴하게 된다.