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 (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());
}
}
}
'java' 카테고리의 다른 글
Step17_JBDC (회원정보관리 Frame, PropertyChangeListener) (0) | 2022.08.09 |
---|---|
Step17_JBDC (작업성공여부, MemberDao) (0) | 2022.08.08 |
Step17_JBDC (DML 응용 예제, JFrame 응용 예제) (0) | 2022.08.05 |
Step17_JBDC (JAVA DML 응용) (0) | 2022.08.05 |
Step17_JBDC 예제 (0) | 2022.08.05 |