• Home
  • About
    • ming photo

      ming

      studying

    • Learn More
    • Twitter
    • Facebook
    • Instagram
    • Github
    • Steam
  • Archive
    • All Posts
    • All Tags
    • All categories
  • categories
    • HTML+CSS+JavaScript
    • JAVA
    • Algorithm
    • DB
    • JSP
    • 정보처리기사
    • Spring
    • Thymeleaf
    • 기술면접
  • Projects

JAVA -JDBC 프로그래밍 - DAO 작성 및 구현클래스 작성(paging,isEnableEmail(email/ id,email))

16 Mar 2021

🔷JDBC - DAO 작성 및 구현클래스 작성(paging,isEnableEmail(email/ id,email))

  • DAO 구현클래스 작성
       package com.javateam.jdbc.member.dao.Impl;
    
      import java.sql.Connection;
      import java.sql.PreparedStatement;
      import java.sql.ResultSet;
      import java.sql.SQLException;
    
      import java.util.ArrayList;
      import java.util.List;
    
      import com.javateam.jdbc.member.dao.MemberDao;
      import com.javateam.jdbc.member.domain.MemberVo;
      import com.javateam.jdbc.member.util.DbUtil;
    
      /**
      * MemberDao의 구현 클래스(concrete class)<br><br>
      * 
      *
      * 용례) MemberDao dao = MemberdaoImpl.getInstance();<br>
      * : 싱클턴(singleton:독신자) 패턴 적용 &rarr; 보안<br><br>
      *  
      * @author mingki
      *
      */
      public class MemberDaoImpl implements MemberDao {
            
          /** DAO 객체 : 싱클턴(singleton) 생성 패턴 적용*/
          private static MemberDaoImpl instance = null;
          private MemberDaoImpl() {}
            
          /**
          * 싱글턴 객체(DAO singleton object) 생성 메서드 
          * 
          * @return DAO 객체
          */
          public static final MemberDaoImpl getInstance() {
              // final : 오버라이드 금지
                
              if(instance == null) {
                  instance = new MemberDaoImpl();
              }
              return instance;
          }
    
          @Override
          public List<MemberVo> getMembersByPaging(int page, int limit) {
    
              // 리턴(반환값) 처리
              List<MemberVo> members = new ArrayList<>();
                
              // 개별 회원정보 객체 선언
              MemberVo member = null;
                
              // 실행 메서드명  
              String methodName = new Exception().getStackTrace()[0].getMethodName();
                
              // DB 연결
              Connection con = DbUtil.connect();
                
              // SQL 처리 객체
              PreparedStatement pstmt = null;
                
              // 결과셋 객체
              ResultSet rs = null;
                
              // SQL 구문
              // 1)
      //		String sql = "SELECT * " + 
      //		 "FROM (SELECT ROWNUM, " + 
      //		 "             m.*, " + 
      //		 "             FLOOR((ROWNUM - 1) / ? + 1) page " + 
      //		 "      FROM (" + 
      //		 "             SELECT * FROM member " + 
      //		 "             ORDER BY member_id ASC " + 
      //		 "           ) m " + 
      //		 "      ) " + 
      //		 "WHERE page = ?";
      //		
              // 2) 
              StringBuilder sb = new StringBuilder();
              sb.append("SELECT * ") 
              .append("FROM (SELECT ROWNUM,") 
              .append("             m.*,") 
              .append("             FLOOR((ROWNUM - 1) / ? + 1) page ") 
              .append("      FROM ( ") 
              .append("             SELECT * FROM member ") 
              .append("             ORDER BY member_id ASC ") 
              .append("           ) m ") 
              .append("      ) ") 
              .append("WHERE page = ?");
                
              // SQL, 인자 (선)처리
              try {
                  // pstmt = con.prepareStatement(sql); // 1)
                  pstmt = con.prepareStatement(sb.toString()); // 2)
                  // 내가 작성한것
      //			pstmt.setInt(1,page);
      //			pstmt.setInt(2,limit);
                    
                  pstmt.setInt(1, limit); // 한 페이지당 출력 인원 수 
                  pstmt.setInt(2, page); // 현재 페이지
                    
                  // SQL 결과셋 객체 생성
                  rs = pstmt.executeQuery();
                
                  while(rs.next()) {
                    
                      member = new MemberVo(); 
                        
                      // SQL 결과셋 -> VO에  이관 				
                      member.setMemberId(rs.getString("member_Id"));
                      member.setMemberPassword(rs.getString("member_Password"));
                      member.setMemberNicname(rs.getString("member_Nickname"));
                      member.setMemberName(rs.getString("member_Name"));
                      member.setMemberGender(rs.getString("member_Gender").charAt(0)); // char로 변환
                      member.setMemberEmail(rs.getString("member_Email"));
                      member.setMemberPhone(rs.getString("member_Phone"));
                      member.setMemberBirth(rs.getDate("member_Birth"));
                      member.setMemberZip(rs.getString("member_Zip"));
                      member.setMemberAddressBasic(rs.getString("member_Address_Basic"));
                      member.setMemberAddressDetail(rs.getString("member_Address_Detail"));
                      member.setMemberJoindate(rs.getDate("member_JoinDate"));
                        
                      // VO -> List 로 이관(add) : 개별 회원정보 추가
                      members.add(member);
                        
                  }
                    
              } catch (SQLException e) {
                  System.out.println(methodName + " : " + e.getMessage());
                    
                  // 자원 반납
              }finally {
                  DbUtil.close(con, pstmt, rs);
              }		
              // 리턴(반환)
              return members;
          }
    
          @Override
          public boolean isEnableEmail(String memberEmail) {
    
              // 리턴(반환값) 처리
              boolean result = false;
                
              // 실행 메서드명  
              String methodName = new Exception().getStackTrace()[0].getMethodName();
                
              // DB 연결
              Connection con = DbUtil.connect();
                
              // SQL 처리 객체
              PreparedStatement pstmt = null;
                
              // 결과셋 객체 (DOL : select)
              ResultSet rs = null;
                
              // SQL 구문
              // 내가 작성한거
      //		String sql = "SELECT count(*) FROM member " + 
      //				"WHERE member_email = ? ";
                
              // 1) 
      //		String sql = "SELECT DECODE(count(*), 0, 'true', 1, 'false') as email_flag "
      //				+ "FROM member " 
      //				+ "WHERE member_email = ? ";
                
              // 2) 
              String sql = "SELECT count(*) FROM member " + 
              "WHERE member_email = ? ";
                
              // SQL, 인자 (선)처리
              try {
                  pstmt = con.prepareStatement(sql);
                  pstmt.setString(1, memberEmail);
                  // SQL 결과셋 객체 생성
                  rs = pstmt.executeQuery();
                  // SQL 실행, 예외처리
                    
                  // 1)
      //			 if(rs.next()) {
      //				 // boolean으로 형변환
      //				 // result = Boolean.valueOf(rs.getString(1)); //(O)
      //				 // result = new Boolean(rs.getString(1)); // (O)
      //				 result = new Boolean(rs.getString("email_flag"));
      //			 }
                  // 2)
                  if(rs.next()) {
                      result = rs.getInt(1) == 1 ? false : true;
                  }
                    
                  // 내가 작성한 코드
      //			 while(rs.next()) {				 
      //				 result = rs.getBoolean(1)== false ? false:true;				 
      //			 }
                    
              } catch (SQLException e) {
                    
                  System.out.println(methodName + " : " + e.getMessage());
                  // 자원 반납
              }finally {
                  DbUtil.close(con, pstmt, rs);
                    
              }
              // 리턴(반환)
              return result;
          }
    
          @Override
          public boolean isEnableEmail(String memberId, String memberEmail) {
              // 리턴(반환값) 처리
              boolean result = false;
                
              // 실행 메서드명  
              String methodName = new Exception().getStackTrace()[0].getMethodName();
    
              // DB 연결
              Connection con = DbUtil.connect();
    
              // SQL 처리 객체
              PreparedStatement pstmt = null;
    
              // 결과셋 객체 (DOL : select)
              ResultSet rs = null;
    
              // SQL 구문
              // 내가 작성한거
              String sql = "SELECT count(*) FROM member " + 
                      "WHERE member_id != ? AND member_email = ? ";
    
      //		String sql = "SELECT DECODE(count(*), 0, 'true', 1, 'false') as email_flag "
      //		+ "FROM member " 
      //		+ "WHERE memberid != ? AND member_email = ? ";
      //		
              // SQL, 인자 (선)처리
              try {
                  pstmt = con.prepareStatement(sql);
                  pstmt.setString(1,memberId);
                  pstmt.setString(2, memberEmail);
    
                  // SQL 결과셋 객체 생성
                  rs = pstmt.executeQuery();
                    
                  // SQL 실행, 예외처리	
                  if(rs.next()) {
                      result = rs.getInt(1) == 0 ? true : false;
                    
                  }else {
                      result = false;
                  }
                    
              } catch (SQLException e) {
                  System.out.println(methodName + " : " + e.getMessage());
                  // 자원 반납
              }finally {
                  DbUtil.close(con, pstmt, rs);
                    
              }
    
              // 리턴(반환)
              return result;
          }
    	   
    
  • getMemberByPaging 테스트 클래스

      package com.javateam.jdbc.member.test;
    
      import java.util.List;
      import com.javateam.jdbc.member.dao.MemberDao;
      import com.javateam.jdbc.member.dao.Impl.MemberDaoImpl;
      import com.javateam.jdbc.member.domain.MemberVo;
    
      /**
      * getMembersByPaging 단위 테스트 케이스<br>
      * : 페이징 단위로 전체 회원정보 조회 테스트<br><br>
      * 
      * @author migki
      *
      */
      public class PagingTest {
    
          public static void main(String[] args) {
                
              // DAO 객체 생성
              MemberDao dao= MemberDaoImpl.getInstance();
                
              // 페이징에 따른 테스트 기대값
                
              // 1) 특정 페이지 입력시 인원수 - 한페이지당 인원수 10명 제한
              // 2) 처음/마지막 인원 회원 아이디 정보로 점검
              // ex) 1 페이지 첫 아이디 = goodee_1001, 마지막 아이디 = goodee_1010
                
              List<MemberVo> members = dao.getMembersByPaging(1, 10);
                
              // 1) 특정 페이지 입력시 인원수 - 한페이지당 인원수 10명 제한
              System.out.println("특정 페이지 입력시 인원수 : " + members.size());
                
              // 2) 처음/마지막 인원 회원 아이디 정보로 점검
              // ex) 1 페이지 첫 아이디 = goodee_1001, 마지막 아이디 = goodee_1010
              System.out.println("처음 인원 회원 아이디 정보로 점검  : " + members.get(0).getMemberId().equals("goodee_1001"));
              System.out.println("마지막 인원 회원 아이디 정보로 점검  : " + members.get(9).getMemberId().equals("goodee_1010"));
                
              // 특정 페이지 전체 인원 출력
              for(MemberVo m : members) {
                  System.out.println(m);
              }
                        
              // 내가 작성한코드 
              //System.out.println(dao.getMembersByPaging(1,10 ));		
          }
       }
    

    ▶ 출력 화면 paging

  • isEnableEmail(memberEmail) 테스트 클래스
     package com.javateam.jdbc.member.test;
    
      import com.javateam.jdbc.member.dao.MemberDao;
      import com.javateam.jdbc.member.dao.Impl.MemberDaoImpl;
    
      /**
      * isEnableEmail 단위 테스트 케이스<br>
      * : 이메일 중복 점검 테스트<br><br>
      * 
      * @author migki
      *
      */
      public class isEnableEmailTest {
    
          public static void main(String[] args) {
                
              // DAO 객체 생성
              MemberDao dao = MemberDaoImpl.getInstance();
                
              // 존재하는 아이디와 존재하지 않는 이메일 두가지 경우를 테스트
              // 1) DB 현황에 존재하는 이메일 로 점검
              System.out.println("회원 이메일 존재 여부(goodee_1@abcd.com): " + dao.isEnableEmail("goodee_1@abcd.com"));
                
              // 2) DB 현황에 존재하지 않는 이메일  점검
              System.out.println("회원 이메일 존재 여부(1234) : " + dao.isEnableEmail("1234"));
    
          }
    
      }
    

▶ 출력 화면 enablemail

🎈 존재하는경우 false가 출력되도록 한 이유 : 중복된 이메일이므로 사용할 수 없기 때문

  • isEnableEmail(memberId, memberEmail) 테스트 클래스
     package com.javateam.jdbc.member.test;
    
      import com.javateam.jdbc.member.dao.MemberDao;
      import com.javateam.jdbc.member.dao.Impl.MemberDaoImpl;
      /**
      * isEnableEmail(id, email) 단위 테스트 케이스<br>
      * : 이메일 중복 점검 테스트<br><br>
      * 
      * @author migki
      *
      */
      public class isEnableEmailTest2 {
    
          public static void main(String[] args) {
                
              // DAO 객체 생성
              MemberDao dao = MemberDaoImpl.getInstance();
                
              System.out.println("회원 ID 존재, 본인의 Email 존재 : " + dao.isEnableEmail("hyun", "skfksnsk1@gmail.com"));
              System.out.println("회원 ID 존재, Email 존재X : " + dao.isEnableEmail("hyun", "skfksn@gmail.com"));
              System.out.println("회원 ID 존재, 다른회원 mail 존재: " + dao.isEnableEmail("hyun", "goodee_2@abcd.com"));
          }
      }
    

▶ 출력 화면 enablemail2



Share Tweet +1