본문 바로가기
Spring

2022-11-09~10 JDBC 2. select - 전체 사원 조회하기

by HTT 2022. 11. 11.

2. 전체 사원 조회하기

package jdbc.exam;
import java.util.Scanner;

public class DAOTest {
	public static void main(String[] args) {
		Scanner key = new Scanner(System.in);
		System.out.println("******인사관리시스템********");
		System.out.println("1. 사원등록");
		System.out.println("2. 전체사원조회");
		System.out.println("3. job별로 사원조회하기");
		System.out.println("4. SMITH부서의 전 사원의 급여를 500올려주기");
		System.out.println("5. comm이 0인 직원 삭제하기");
		System.out.println("6. 각 매니저의 정보 조회하기(매니저 아이디로 조회하기)");
		System.out.print("원하는 작업을 선택하세요:");
		int choice  = key.nextInt();
		show(choice);
	}
	public static void show(int choice){
		MenuUI ui = new MenuUI();
		switch(choice){
			case 1:
				ui.insertMenu();
				break;
			case 2:
				ui.selectMenu();
				break;
			case 3:
				ui.searchMenu();
				break;
			case 4:
				ui.updateMenu();
				break;
			case 5:
				ui.deleteMenu();
				break;
			case 6:
				ui.getInfoMenu();
				break;
		}
	}
}

- main메소드에서 show메소드 호출, show메소드에서 select메소드 호출

 

 

package jdbc.exam;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import jdbc.DBUtil;

public class CustomerDAO2 {
	public ArrayList<CustomerDTO2> select() { // 2.emp전체사원조회
		String sql = "select * from emp";
		ArrayList<CustomerDTO2> userlist = new ArrayList<CustomerDTO2>();
		CustomerDTO2 user = null;
		Connection con = null;
		PreparedStatement ptmt = null;
		ResultSet rs = null;
		try {
			con = DBUtil.getConnect();
			ptmt = con.prepareStatement(sql);
			rs = ptmt.executeQuery();
			System.out.println("조회된 ResultSet객체 : " + rs);
			while (rs.next()) {
				System.out.print(rs.getString("empno") + "\t");
				user = new CustomerDTO2(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getInt(4), rs.getDate(5),
						rs.getInt(6), rs.getInt(7), rs.getInt(8));
				userlist.add(user);
			}
			System.out.println("리스트 사이즈 : " + userlist.size());
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtil.close(rs, ptmt, con);
		}
		return userlist;
	}
}

- 우선 받아오는 데이터가 하나가 아니기 때문에 적절한 자료구조를 이용해 담아줘야 한다. 객체를 만들어서 데이터를 넘겨줘야 하기 때문에 CustomerDTO2타입의 ArrayList 바구니(userlist)를 만들고, ResultSet을 이용해 2개 이상의 데이터를 탐색해준다.

 

- ResultSet에 데이터가 있는 동안 받아온 데이터를 CustomerDTO2타입의 변수 user에 담아주고 이를 아까 만들어둔 바구니에 넣어준다. 넘겨줄 리턴값의 타입이 CustomerDTO2타입의 ArrayList이기 때문에 MenuUI클래스에서도 ArrayList<CustomerDTO2>타입 변수를 만들어 메소드의 리턴값을 받아준다.

 

 

package jdbc.exam;
import java.util.ArrayList;
import java.util.Scanner;

public class MenuUI {
	Scanner key = new Scanner(System.in);
	CustomerDAO2 cd = new CustomerDAO2();
    
    public void selectMenu(){
		System.out.println("*******전체사원조회********");
		ArrayList<CustomerDTO2> userlist = cd.select();
		int size = userlist.size();
		for (int i = 0; i < size; i++) {
			CustomerDTO2 user = userlist.get(i);
			System.out.println("사원번호 : " +user.getEmpno());
			System.out.println("이름 : " +user.getEname());
			System.out.println("직업 : " +user.getJob());
			System.out.println("매니저번호 : " +user.getMgr());
			System.out.println("입사일 : " +user.getHiredate());
			System.out.println("급여 : " +user.getSal());
			System.out.println("보너스 : " +user.getComm());
			System.out.println("부서번호 : " +user.getDeptmo());
			System.out.println("====================================================");
		}
	}
}

 

- for문

size()메소드를 for문 안에 넣고 돌리게 되면 비효율적이므로 밖으로 빼서 int타입 변수에 담아주면 userlist의 사이즈만큼 

for문이 돌아가면서 select메소드로 받아온 데이터를 하나씩 출력하게 된다.

 

- 향상된 for문

for (CustomerDTO alluser : userlist) {
	System.out.println(alluser.toString());
}

userlist의 담겨있는 데이터를 모두 alluser 담아준다. alluser그대로 출력하게 되면 주소값이 나오므로 CustomerDTO2의 toString메소드를 이용해 출력해주면 처음 입력된 순서대로 데이터가 출력된다.

댓글