• 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 작성 및 구현클래스 작성(getAll, get, delete)

12 Mar 2021

🔷JDBC 프로그래밍 - DAO 작성 및 구현클래스 작성(getAll, get, delete)

  • 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> getAllMembers() {
                
              // 리턴(반환값) 처리
              List<MemberVo> members = new ArrayList<>(); // List 사용
                
              // 개별 회원정보 객체 선언
              MemberVo member = null;
                
              // 실행 메서드명  
              String methodName = new Exception().getStackTrace()[0].getMethodName();
                
              // DB 연결
              Connection con = DbUtil.connect();
                
              // SQL 처리 객체
              PreparedStatement pstmt = null;
                
              // SQL 결과셋 객체(DQL:select)
              ResultSet rs = null;
                
              // SQL 구문
              String sql = "SELECT * FRom member";
                
              try {
                  // SQL 처리
                  pstmt = con.prepareStatement(sql);
                    
                  // SQL 결과셋 객체 생성
                  rs = pstmt.executeQuery();
                    
                  // next() : 결과셋에서 다음 행을 조회하는 방식(iterator)
                  while(rs.next()) { 
                        
                      // 개별 회원정보 생성
                      // 주의) VO 객체 이 구문에서 선언  => 특정 개별 회원들만 여러행 출력된다 (안좋다)
                      // => 대책 : VO 객체 외부에서 선언한다 -> 리턴처리문 아래에 선언(MemberVo member = null;)
                      // MemberVo member = new MemberVo(); //=> 한명이 여러번 나오는 버그 발생
                      member = new MemberVo(); // (O)
                        
                      // 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);
                        
                  }
                  // SQL 실행, 예외처리
              }catch(SQLException e) {
                  System.out.println(methodName + " : " + e.getMessage());
                    
              } finally {
                  // 자원 반납
                  DbUtil.close(con, pstmt, rs);		
                
          } // 리턴(반환)
              return members ;
          }
    
          @Override
          public MemberVo getMember(String memberId) {
              // 리턴(반환값) 처리
              MemberVo member = new MemberVo();
                
              // 실행 메서드명  
              String methodName = new Exception().getStackTrace()[0].getMethodName();
                
              // DB 연결
              Connection con = DbUtil.connect();
                
              // SQL 처리 객체
              PreparedStatement pstmt = null;
                
              // SQL 결과셋 객체(DQL : select)
              ResultSet rs = null;
                
              // SQL 구문
              String sql = "SELECT * FROM member WHERE member_id= ? ";
                
              // SQL, 인자 (선)처리, SQL 실행, 예외처리
              try {
                  pstmt = con.prepareStatement(sql);
                  pstmt.setString(1, memberId);
                    
                  rs = pstmt.executeQuery();
                    
                  // 한줄 나오기때문에 while문 안써도됨
                  if(rs.next()) {
                      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"));
                        
                        
                  }
                    
              }catch(SQLException e) {
                  System.out.println(methodName + " : " + e.getMessage());
                    
              }finally {
                  // 자원 반납
                  DbUtil.close(con, pstmt, rs);
              }
                        
              // 리턴(반환)
              return member;
          }
           
          @Override
          public boolean deleteMember(String memberId) {
                
              // 리턴(반환값) 처리
              boolean result = false;
                
              // 실행 메서드명  
              String MethodName = new Exception().getStackTrace()[0].getMethodName();
                
              // DB 연결
              Connection con = DbUtil.connect();
                
              // SQL 처리 객체
              PreparedStatement pstmt = null;
                
              // SQL 구문
              String sql = "DELETE member WHERE member_id=?";
                
              // SQL, 인자 (선)처리
              try {
                  pstmt = con.prepareStatement(sql);
                    
                  pstmt.setString(1, memberId);
                  if(pstmt.executeUpdate()==1) {
                      System.out.println("회원정보 삭제가 완료 되었습니다");
                      result = true;
                  }else {
                      System.out.println("회원정보 삭제에 실패하였습니다");
                  }
                
                  // SQL 실행, 예외처리
              }catch(SQLException e) {
                  System.out.println(MethodName + " : " + "회원정보 삭제시 예외 발생");
                  System.out.println(MethodName + " : " + e.getMessage());
                    
              } finally {
                  // 자원 반납
                  DbUtil.close(con, pstmt, null);
              }		
              // 리턴(반환)
              return result;
          }
    
      }
    
  • getAllMembers 테스트 클래스

      package com.javateam.jdbc.member.test;
    
      import java.util.ArrayList;
      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;
      /**
      * getAllMembers 메서드 단위 테스트 케이스(Unit TestCase)<br><br>
      * : 전체 회원정보 조회<br><br>
      * 
      * @author mingki
      *
      */
      public class AllMembersTest {
    
          public static int getCountByWord(List<String> list, String id) {
                    
                  int count = 0;
            
                  for (int i=0; i<list.size(); i++) {
                        
                      if (list.get(i).contentEquals(id)) {
                          count++;
                      }
                  }
                    
                  return count;
              }
          public static void main(String[] args) {
                
              // DAO 객체 생성
              MemberDao dao = MemberDaoImpl.getInstance();
                
              // 인원수 확인
              System.out.println("인원수 확인 : " + (dao.getAllMembers().size()==8 ? true: false));
                
              // 테스트 케이스 점검 사항
              // 중복행 출력 여부 점검
              // 각 행에 대한 회원 아이디를 중복성 점검
              List<String> ids = new ArrayList<>();
                
              // 전체 현황 확인
              for (MemberVo m : dao.getAllMembers()) {
                  // System.out.println(m);
                  ids.add(m.getMemberId());
                    
              }
              List<MemberVo> list = dao.getAllMembers();
              // id 중복여부 출력
              for(int i=0; i<list.size();i++) {
                  String id = list.get(i).getMemberId(); 
                      System.out.println(id + ":" + getCountByWord(ids,id));
              }
          }
    
      }
    

    ▶ 출력 화면 getall

▶ DB
getallDB

  • getMember 테스트 클래스
      package com.javateam.jdbc.member.test;
    
      import java.sql.Date;
    
      import com.javateam.jdbc.member.dao.MemberDao;
      import com.javateam.jdbc.member.dao.Impl.MemberDaoImpl;
      import com.javateam.jdbc.member.domain.MemberVo;
    
      /**
      * getMember 메서드 단위 테크스 케이스<br>
      * : 개별 회원 정보 조회<br><br>
      * 
      * @author migki
      *
      */
      public class GetMemberTest {
    
          public static void main(String[] args) {
                
              // DAO 객체 생성
              MemberDao dao= MemberDaoImpl.getInstance();
                
              // DB에 입력된 값들과 VO 값을 비교
              // 비교대상 VO 준비
              MemberVo member = new MemberVo();
                
              member.setMemberId("java5555");
              member.setMemberPassword("1234");
              member.setMemberNicname("구디샘");
              member.setMemberName("홍길동");
              member.setMemberGender('m');
              member.setMemberEmail("abcd@abcd.com");
              member.setMemberPhone("010-1234-5678");
              member.setMemberBirth(Date.valueOf("2016-02-05"));
              member.setMemberZip("12345");
              member.setMemberAddressBasic("서울 금천 가산");
              member.setMemberAddressDetail("구디아카데미");
              // 날짜 입력
              member.setMemberJoindate(Date.valueOf("2021-03-12"));
                
              System.out.println(member);
              System.out.println(dao.getMember("java5555"));
                
              System.out.println(member.hashCode());
              System.out.println(dao.getMember("java5555").hashCode());
                
              String result = member.equals(dao.getMember("java5555"))?
                              "회원정보 조회 성공" : "회원정보 조회 실패";
                
              System.out.println(result);
                
          }
    
      }
    

▶ 출력 화면 getmember

  • Delete 테스트 클래스
      package com.javateam.jdbc.member.test;
    
      import java.sql.Date;
    
      import com.javateam.jdbc.member.dao.MemberDao;
      import com.javateam.jdbc.member.dao.Impl.MemberDaoImpl;
      import com.javateam.jdbc.member.domain.MemberVo;
    
      /**
      * DeleteMember 메서드 단위 테스트(Unit Test Case) <br>
      * : 회원정보 삭제 테스트<br><br>
      * 
      * @author mingki
      *
      */
      public class DeleteMemberTest {
    
          private static String memberId;
    
          public static void main(String[] args) {
                
              // DAO 객체 생성
              MemberDao dao = MemberDaoImpl.getInstance();
                
    
              // UpdateMember 테스트(true/false)
              String result = dao.deleteMember("java12345") == true ? 
                              "삭제 성공" : "삭제 실패";
              System.out.println("DeleteMember 테스트 결과 " + result);
          }
    
      }
    

    ▶ 출력 화면 delete

▶ DB delete2



Share Tweet +1