본문 바로가기

java

Step17_JBDC (MemberDao SELECT)

 

 

MemberDao (DAO, DTO 활용하여 SELECT 코드 만들기)

기존 MemberDao에서 추가

 

1. SELECT. 전체 회원의 목록을 리턴하는 메소드

Step12_UtilClass를 참고하였다.

//1. 전체 회원의 목록을 리턴하는 메소드
public List<MemberDto> getList(){
  //전체 회원 목록을 담을 ArrayList 객체는 미리 생성해 둔다.
  List<MemberDto> list=new ArrayList<>();

  //필요한 객체를 담을 지역 변수를 미리 만든다. 
  Connection conn=null;
  PreparedStatement pstmt=null;
  ResultSet rs=null;
  try {
     conn=new DBConnect().getConn();
     //실행할 sql문 구성하기 
     String sql="SELECT num, name, addr"
           + " FROM member"
           + " ORDER BY num ASC";
     pstmt=conn.prepareStatement(sql);
     // ? 에 바인딩 할 내용이 있으면 한다.

     // select 문 수행하고 결과를 ResultSet 으로 얻어내기
     rs=pstmt.executeQuery();
     //반복문 돌면서 
     while(rs.next()) { //커서를 한칸씩 내리고
        //커서가 위치한 곳의 회원 한명의 정보를 MemberDto 객체에 담고
        MemberDto dto=new MemberDto();
        dto.setNum(rs.getInt("num"));
        dto.setName(rs.getString("name"));
        dto.setAddr(rs.getString("addr"));
        //MemberDto 객체의 참조값을 ArrayList 객체에 누적 시킨다. 
        list.add(dto);
     }
  }catch(Exception e) {
     e.printStackTrace();
  }finally {
     try {
        if(rs!=null)rs.close();
        if(pstmt!=null)pstmt.close();
        if(conn!=null)conn.close();
     }catch(Exception e) {}
  }
  //MemberDto 객체의 참조값이 순서대로 누적된 ArrayList 객체의 참조값을 리턴해 준다.
  return list;
}

 

2. SELECT. 특정 회원 한명의 정보를 리턴하는 메소드

MainClass11을 참고하였다. MainClass11과 내용이 같다. if문에서 변수에 담고 안담고의 표현 차이이다.

//2. 특정 회원 한명의 정보를 리턴하는 메소드 
public MemberDto getData(int num) {
  //필요한 객체를 담을 지역 변수를 미리 만든다. 
  Connection conn=null;
  PreparedStatement pstmt=null;
  ResultSet rs=null;

  MemberDto dto=null;
  try {
     conn=new DBConnect().getConn();
     //실행할 sql문 구성하기 
     String sql="SELECT name, addr"
           + " FROM member"
           + " WHERE num=?";
     pstmt=conn.prepareStatement(sql);
     // ? 에 바인딩 할 내용이 있으면 한다.
     pstmt.setInt(1, num);
     // select 문 수행하고 결과를 ResultSet 으로 얻어내기
     rs=pstmt.executeQuery();
     /*
      *  primary key 로 select 를 하게 되면 select 된 row 는 최대 1개 이므로
      *  cursor 를 반복문 돌면서 여러번 내릴 필요가 없다. 
      *  즉 rs.next() 는 한번만 수행되면 된다. 
      */
     if(rs.next()) {
        //MemberDto 객체를 생성해서 
        dto=new MemberDto();
        //지역변수에 있는 회원 번호를 담고
        dto.setNum(num);
        //ResultSet 으로 부터 이름을 얻어내서 담고 
        dto.setName(rs.getString("name"));
        //ResultSet 으로 부터 주소를 얻어내서 담는다. 
        dto.setAddr(rs.getString("addr"));
     }
  }catch(Exception e) {
     e.printStackTrace();
  }finally {
     try {
        if(rs!=null)rs.close();
        if(pstmt!=null)pstmt.close();
        if(conn!=null)conn.close();
     }catch(Exception e) {}
  }
  //select 된 row 가 없다면 dto 는 null 이다. 
  return dto;
}

 

 

MainClass16 (SELECT 특정회원조회)

Scanner 활용

 

MemberDao 객체를 이용해서 입력한 번호에 해당하는 회원 정보를 얻어와서

 

회원 정보가 있으면 아래와 같은 형식으로 회원 정보를 콘솔창에 출력하고
이름 => 김구라, 주소 => 노량진

 

회원 정보가 없으면 아래의 형식으로 출력하도록 해보세요.
x 번 회원은 존재하지 않습니다.

 

package test.main;

import java.util.Scanner;

import test.dao.MemberDao;
import test.dto.MemberDto;

public class MainClass16 {
	public static void main(String[] args) {
		Scanner scan=new Scanner(System.in);
		while(true) {
			System.out.println("검색할 회원의 번호 입력(종료:q)");
			String str=scan.nextLine();
			//만일 q를 입력하면 break 를 이용해서 반복문 탈출
			if(str.equals("q")) {
				break;
			}
			//입력한 문자열을 정수로 바꾼다.
			int num=Integer.parseInt(str);
			System.out.println(num+" 번 회원의 정보 조회중...");
			MemberDto dto=new MemberDao().getData(num);
			if(dto == null) {
				System.out.println(num+" 번 회원은 존재하지 않습니다.");
			} else {
				System.out.println("이름 => "+dto.getName()+", 주소 => "+dto.getAddr());
			}
		}
		System.out.println("app 이 종료 됩니다.");
	}
}

MainClass17 console

 

 

MainClass17 (SELECT 전체회원조회)

 

package test.main;

import java.util.List;

import test.dao.MemberDao;
import test.dto.MemberDto;

public class MainClass17 {
   public static void main(String[] args) {
      /*
       *  MemberDao 객체를 이용해서 회원 전체 목록을 얻어와서
       *  아래와 같은 형식으로 출력해 보세요.
       *  
       *  번호 => 1, 이름 => 김구라, 주소 => 노량진
       *  번호 => 2, 이름 => 해골, 주소 => 행신동
       *  번호 => 3, 이름 => 원숭이, 주소 => 상도동
       *  .
       *  .
       */
      
      List<MemberDto> members=new MemberDao().getList();
      for(MemberDto tmp:members) {
         System.out.println("번호 => "+tmp.getNum()+", 이름 => "+tmp.getName()
               + ", 주소 => "+tmp.getAddr());
      }
   }
}

MainClass17 console