개발자 미니민의 개발스터디

[JAVA] JDBC 성적문제 (2) (UI 클래스 코드)

by mini_min

🔒 버퍼 리더와 인터페이스 구현 객체 생성

private BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private ScoreDAO dao = new ScoreDAOImpl();
💡 ScoreDAOImpl() 인터페이스를 구현할 수 있도록 인터페이스 구현 객체 dao 를 선언해준다.

 

 

🔒 insert() -- 데이터 추가하기

protected void insert() { 
		System.out.println("\n데이터 등록 !!!");
		
		try {
			ScoreDTO dto = new ScoreDTO();
			
			System.out.print("학번? ");
			dto.setHak(br.readLine());
			
			System.out.print("이름? ");
			dto.setName(br.readLine());
			
			System.out.print("생년월일? ");
			dto.setBirth(br.readLine());
			
			System.out.print("국어 ? ");
			dto.setKor(Integer.parseInt(br.readLine()));
			
			System.out.print("영어 ? ");
			dto.setEng(Integer.parseInt(br.readLine()));
			
			System.out.print("수학 ? ");
			dto.setMat(Integer.parseInt(br.readLine()));
			
			dao.insertScore(dto);
			
			
			System.out.println("데이터 등록했습니다.");
		} catch (NumberFormatException e) {
			System.out.println("점수는 숫자만 가능합니다.");
			
		} catch (Exception e) {
			System.out.println("데이터 등록이 실패했습니다.");
			//무조건 같이 뜨는 예외. 위에 예외들과 함께!
		}
		System.out.println();
	}
💡 dto 객체에 입력받고 insertScore 인터페이스 구현 메소드를 실행한다.

 

 

🔒 update() -- 데이터 수정하기

protected void update() {
		System.out.println("\n데이터 수정 !!!");
		
		try {
			ScoreDTO dto = new ScoreDTO();
			
			System.out.println("수정할 학번은 ? ");
			dto.setHak(br.readLine());
			
			
			System.out.println("수정할 이름은 ? ");
			dto.setName(br.readLine());
			
			
			System.out.println("수정할 생년월일은 ? ");
			dto.setBirth(br.readLine());
			
			
			System.out.println("수정할 국어점수는 ? ");
			dto.setKor(Integer.parseInt(br.readLine()));
			
			System.out.println("수정할 영어점수는 ? ");
			dto.setEng(Integer.parseInt(br.readLine()));
			
			System.out.println("수정할 수학점수는 ? ");
			dto.setMat(Integer.parseInt(br.readLine()));
			
			int result = dao.updateScore(dto);
			
			if(result == 0 ) {
				System.out.println("등록된 자료가 아닙니다.");
			}else {
				System.out.println("데이터가 수정되었습니다.");
			}
			
			
		} catch (Exception e) {
			System.out.println("자료 등록에 실패했습니다.");
		}
		System.out.println();
	}
💡 데이터 추가와 달리 수정은 수정할 데이터가 없을 수도 있다. (데이터 등록이 선작업 되어야하기 때문에)

그래서 수정할 데이터가 없을 때 result 가 0으로 반환되는 점을 이용

result 가 0 일 때, 등록된 자료가 없다는 에러가 출력되도록 작성한다.

 

 

🔒 listAll() -- 전체 리스트

protected void listAll() {
		System.out.println("\n전체 리스트 !!!");
		
		System.out.println("학번\t이름\t생년월일\t\t국어\t영어\t수학\t총점\t평균\t석차");
		System.out.println("----------------------------------------");
		
		List<ScoreDTO> list = dao.listScore();
		for(ScoreDTO dto : list) {
			System.out.print(dto.getHak() + "\t");
			System.out.print(dto.getName() + "\t");
			System.out.print(dto.getBirth() + "\t");
			System.out.print(dto.getKor() + "\t");
			System.out.print(dto.getEng() + "\t");
			System.out.print(dto.getMat() + "\t");
			System.out.print(dto.getTot() + "\t");
			System.out.print(dto.getAve() + "\t");
			System.out.println(dto.getRank());
			// 이름검색하고 그럴 때 석차 계산하는거 아니다.
			
		}
		System.out.println();
		
	}
💡 dao 인터페이스가 구현된 메소드를 받는 list 객체 생성.
List<ScoreDTO> list = dao.listScore();

이제 SELECT 해서 검색한 데이터를 저장한 List 객체를 dto 객체에 하나씩 저장하고 
반복해서 학번, 이름, 생일, 국, 영, 수, 총점, 평균, 랭크를 출력한다.

 

 

🔒 findByHak() -- 학번 검색

protected void findByHak() {
System.out.println("\n학번 검색 !!!");
			String hak;
            try {
				System.out.println("검색할 학번 ? ");
				hak = br.readLine();
				
				ScoreDTO dto = dao.readScore(hak);
				
				if(dto==null) {
					System.out.println("등록된 자료가 없어요.");
				return;
				}
				
				System.out.print(dto.getHak() + "\t");
				System.out.print(dto.getName() + "\t");
				System.out.print(dto.getBirth() + "\t");
				System.out.print(dto.getKor() + "\t");
				System.out.print(dto.getEng() + "\t");
				System.out.print(dto.getMat() + "\t");
				System.out.print(dto.getTot() + "\t");
				System.out.println(dto.getAve());
				
				
			} catch (Exception e) {
				e.printStackTrace();
			}
	}
💡 학번을 읽는데 list 객체 안쓰는 이유 
: 학번은 기본키라서 어차피 1개의 데이터 밖에 없기 때문. 그래서 ScoreDTO 객체에 저장한다.

등록된 자료가 없는 경우가 아니면 dto.getHak 등등으로 하나씩 출력되도록 한다.

 

 

 

 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기