29일차 공부 DAO작성
1 교시
어제 수업 이어서...
9. 데이터 삽입
=> 기본키를 어떻게 생성?
하나는 기본키의 값을 직접 입력하도록 하는 경우 : 아이디
기본키의 값을 자동으로 설정하도록 하는 경우 : 일련변호
=> 직접 입력하도록 하는 경우에는 중복 검사를 수행
=> 자동으로 설정하는 경우에는 오라클의 시퀀스나 MySQL의 Auto_Increment를 이용하는 경우가 있고 가장 큰 번호를 찾아서 +1을 하는 방법이 있다.
1) 기본키를 직접 입력받는 경우 : 입력받을 때 중복 검사를 수행
=> getNBAPlayer()를 이용해서 중복 검사 가능
num을 1개 받아서 1개의 데이터를 찾아오는 메소드
데이터가 리턴되면 존재하는 num이고 null이 리턴되면 존재하지 않는 num
=> DAO 클래스에 데이터를 삽입하는 메소드를 작성
public int insertNBAPlayer(NBAPlayer nbaplayer){ // 여기서 -1은 의미없는 값으로 삽입 실패를 의미하는 값, 어떤 음수로도 가능 - 0은 조심 int result = -1; // 데이터베이스 연결 connect(); try { // 순서를 기억하자 // SQL 실행 객체 생성 - SQL 생성 // 값을 대입하는 곳은 ?로 설정 // 값을 대입하는 곳 중에서 고정된 값이면 고정된 값을 이용 pstmt = con.prepareStatement("insert into 테이블이름(num, pname, pteam, maxscore, sumscore, avgscore) values(?, ?, ?, ?, ?, ?)"); // 비어 있는 곳에 값을 채움(바인딩 - Binding) pstmt.setInt(1, nbaplayer.getNum()); pstmt.setString(2, nbaplayer.getPname()); pstmt.setString(3, nbaplayer.getPteam()); pstmt.setInt(4, nbaplayer.getMaxscore()); pstmt.setInt(5, nbaplayer.getSumscore()); pstmt.setDouble(6, nbaplayer.getAvgscore()); // SQL 실행 result = pstmt.executeUpdate(); }catch(Exception e) { // 자신이 알아볼수 있는 예외 메시지를 출력 System.out.println("데이터 삽입 실패"); // 프로그램이 주는 예외 메시지 출력 System.out.println(e.getMessage()); // 위의 2개 작업은 파일이나 데이터베이스에 기록하고 주석처리 // 예외 발생지점을 찾기 위한 작업 e.printStackTrace(); } // 데이터베이스 연결해제 close(); return result; } |
=> Main 클래스의 case5 에 해당하는 코드를 작성
이전에 만든 String temp를 switch 바깥에서 선언하도록 수정
case "5": // num 을 입력 System.out.print("삽입할 번호를 입력:"); temp = sc.nextLine(); num = Integer.parseInt(temp); // num이 존재하는지 조회 nbaplayer = dao.getNBAPlayer(num); // num이 존재하지 않는 경우 if(nbaplayer == null) { // 이름과 팀을 입력 받기 System.out.print("이름:"); pname = sc.nextLine(); System.out.print("팀:"); pteam = sc.nextLine(); // 최대득점, 총득점, 평균득점 입력받기 System.out.print("최대득점:"); maxscore = Integer.parseInt(temp); temp = sc.nextLine(); System.out.print("총득점:"); sumscore = Integer.parseInt(temp); temp = sc.nextLine(); System.out.print("평균득점:"); avgscore = Double.parseDouble(temp); temp = sc.nextLine(); // 데이터베이스 메소드에 넘겨주기 위해서 입력받은 데이터를 1개로 만들기 nbaplayer = new NBAPlayer(); nbaplayer.setNum(num); nbaplayer.setPname(pname); nbaplayer.setPteam(pteam); nbaplayer.setMaxscore(maxscore); nbaplayer.setSumscore(sumscore); nbaplayer.setAvgscore(avgscore); // 데이터베이스 메소드 호출 result = dao.insertNBAPlayer(nbaplayer); // 결과 사용 if(result >0) { System.out.println("데이터 삽입 성공"); }else { System.out.println("데이터 삽입 실패"); } } // num이 존재하는 경우 else { System.out.println("이미 존재하는 번호입니다."); } |
메인을 실행후 십입하고자 하는 데이터를 차례차례 입력 |
![]() |
=> mysql의 한글 문제
이젠에는 Open Source를 유럽에서 많이 진행했다.
Open Source들의 인코딩 방식이 ISO-Latin1(ISO-8859-1)으로 설정된 경우가 많았다.
ISO-8859-1에서는 한글이 안된다.
접속할 때 utf-8로 접속할 수 있도록 연결 URL을 수정해야 한다.
연결 URL 뒤에 ?useUnicode=true&characterEncoding=utf8 을 추가해야 한다.
NBAPlayerDAO 클래스에서 수정 |
private void connect() { try { // 데이터베이스 연결 con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sample? useUnicode=true&characterEncoding=utf8", "root", "user05"); //System.out.println("데이터베이스 접속 성공"); }catch(Exception e) { System.err.println("데이터베이스 연결 실패"); System.err.println(e.getMessage()); e.printStackTrace(); } } |
한글로 입력해보자. |
![]() |
![]() |
2 교시
2) 기본키를 자동으로 입력
=> Oracle의 Sequence나 MySQL의 Auto_Increment를 사용
=> 테이블에서 직접 가장 큰 번호를 찾아서 +1을 하는 방식
=> DAO클래스에 가장 큰 번호를 가져오는 메소드를 생성 - private으로 생성
insertNBAPlayer에서 호출해서 사용
public int maxNum() { //데이터가 없을 때는 번호가 0이 있다고 가정 int result = 0; connect(); try { pstmt = con.prepareStatement("select max(num) from nbaplayer"); ResultSet rs = pstmt.executeQuery(); if(rs.next()) { // select의 첫번째 컬럼의 값을 정수로 result에 저장 result = rs.getInt(1); } }catch(Exception e) { System.out.println("가장 큰 번호 가져오기 실패"); System.out.println(e.getMessage()); e.printStackTrace(); } close(); return result; } |
=> DAO 클래스에서 insertNBAPlayer 메소드를 수정
public int insertNBAPlayer(NBAPlayer nbaplayer){ // 여기서 -1은 의미없는 값으로 삽입 실패를 의미하는 값, 어떤 음수로도 가능 - 0은 조심 int result = -1; // 가장 큰 num을 찾아서 +1을 한 후 num에 대입 int num = this.maxNum() +1; // 위의 문장이 connect() 뒤에 있으면 데이터베이스 연결을 해제해서 // 데이터베이스 연결 connect(); try { // 순서를 기억하자 // SQL 실행 객체 생성 - SQL 생성 // 값을 대입하는 곳은 ?로 설정 // 값을 대입하는 곳 중에서 고정된 값이면 고정된 값을 이용 pstmt = con.prepareStatement("insert into nbaplayer(num, pname, pteam, maxscore, sumscore, avgscore) values (?, ?, ?, ?, ?, ?)"); // 비어 있는 곳에 값을 채움(바인딩 - Binding) // 번호를 입력받는 경우 //pstmt.setInt(1, nbaplayer.getNum()); // 가장 큰 번호 +1 pstmt.setInt(1, num); pstmt.setString(2, nbaplayer.getPname()); pstmt.setString(3, nbaplayer.getPteam()); pstmt.setInt(4, nbaplayer.getMaxscore()); pstmt.setInt(5, nbaplayer.getSumscore()); pstmt.setDouble(6, nbaplayer.getAvgscore()); // SQL 실행 result = pstmt.executeUpdate(); }catch(Exception e) { // 자신이 알아볼수 있는 예외 메시지를 출력 System.out.println("데이터 삽입 실패"); // 프로그램이 주는 예외 메시지 출력 System.out.println(e.getMessage()); // 위의 2개 작업은 파일이나 데이터베이스에 기록하고 주석처리 // 예외 발생지점을 찾기 위한 작업 e.printStackTrace(); } // 데이터베이스 연결해제 close(); return result; } |
=> 하나의 메소드에 여러 개의 SQL을 수행할 대는 작업 순서에 주의
연결 -> 작업 -> 해제 -> 연결 -> 작업 -> 해제 의 순서를 지켜야 한다.
연결 -> 연결 - > 작업 -> 해제 -> 작업 ->해제 의 순이 되면 예외 발생
=> Maina 클래스의 데이터 삽입 부분을 수정
자동으로 대입되므로 num을 입력받아서 중복 검사를 할 필요가 없다.
case "5": // 이름과 팀을 입력 받기 System.out.print("이름:"); pname = sc.nextLine(); System.out.print("팀:"); pteam = sc.nextLine(); // 최대득점, 총득점, 평균득점 입력받기 System.out.print("최대득점:"); temp = sc.nextLine(); maxscore = Integer.parseInt(temp); System.out.print("총득점:"); temp = sc.nextLine(); sumscore = Integer.parseInt(temp); System.out.print("평균득점:"); temp = sc.nextLine(); avgscore = Double.parseDouble(temp); // 데이터베이스 메소드에 넘겨주기 위해서 입력받은 데이터를 1개로 만들기 nbaplayer = new NBAPlayer(); nbaplayer.setNum(num); nbaplayer.setPname(pname); nbaplayer.setPteam(pteam); nbaplayer.setMaxscore(maxscore); nbaplayer.setSumscore(sumscore); nbaplayer.setAvgscore(avgscore); // 데이터베이스 메소드 호출 result = dao.insertNBAPlayer(nbaplayer); // 결과 사용 if(result >0) { System.out.println("데이터 삽입 성공"); }else { System.out.println("데이터 삽입 실패"); } break; |
4 교시
10. 삭제 작업
=> 삭제의 경우는 대부분 기본키만 받아서 수행하는 경우가 많다.
=> 회원제 사이트의 경우는 비밀번호를 먼저 입력받아서 데이터를 수정이나 삭제해도 되는 유저인지 판별하고 수행
=> 삭제나 수정은 데이터가 맞는지 재확인을 하는 절차를 거친다.
삽입은 이런 절차를 거치지 않지만 입력 내용이 보이지 않는 비밀번호의 경우만 이런 재확인 절차를 거친다.
=> 수정의 경우는 데이터를 찾아와서 기존 내용이 무엇인지 보여주고 수정을 하도록 해주어야 한다.
=> 삭제하는 SQL
delete from 테이블이름
where 기본키 = ?;
case "7": // 삭제할 번호 입력 System.out.println("삭제할 번호:"); temp = sc.nextLine(); num = Integer.parseInt(temp); // 데이터의 존재 여부를 확인 nbaplayer = dao.getNBAPlayer(num); if(nbaplayer == null) { System.out.println("삭제할 수 없는 번호입니다"); }else { // 정말로 삭제할 것인지 확인 System.out.println("정말로 삭제(Y):"); temp = sc.nextLine(); // 영문을 입력받아서 비교 // trim은 좌우 공백 제거 // toUpperCase는 모두 대문자로 변경 if(temp.trim().toUpperCase().contentEquals("Y")) { // 삭제 result = dao.deleteNBAPlayer(num); // 삭제 결과 사용 if(result >0) { System.out.println("삭제 성공"); }else { System.out.println("삭제 실패"); } } } break; |
11. 수정하기
=> 수정하는 SQL
update 테이블이름
set 컬럼이름 = 값(계산식), 컬럼이름 = 값...
where 기본키 =?;
1) DAO 클래스에 데이터 수정을 위한 메소드
=> 데이터 삽입 메소드와 원형이 동일
//데이터 수정을 위한 메소드
public int updateNBAPlayer(NBAPlayer nbaplayer) { int result = -1; connect(); try { pstmt = con.prepareStatement("update nbaplayer set pname=?, pteam=?, maxscore=?, sumscore=?, avgscore=? where num = ?"); pstmt.setString(1, nbaplayer.getPname()); pstmt.setString(2, nbaplayer.getPteam()); pstmt.setInt(3, nbaplayer.getMaxscore()); pstmt.setInt(4, nbaplayer.getSumscore()); pstmt.setDouble(5, nbaplayer.getAvgscore()); pstmt.setInt(6, nbaplayer.getNum()); result = pstmt.executeUpdate(); }catch(Exception e) { System.out.println("데이터 수정 실패"); System.out.println(e.getMessage()); e.printStackTrace(); } close(); return result; } |
5 교시
2) Main 클래스에서 데이터 수정에 대한 case 구문을 작성
case "6": // 기본키 값 입력받기 System.out.print("수정할 번호:"); num = sc.nextInt(); sc.nextLine(); // Enter를 가져가기 위해서 추가 // 데이터찾아오기 nbaplayer = dao.getNBAPlayer(num); if(nbaplayer == null) { System.out.println("없는 번호입니다."); }else { // 이름 입력받기 System.out.println("이름 입력(이전-" + nbaplayer.getPname() +"):"); pname = sc.nextLine(); // 글자수가 0이면 이전값 갖기 if(pname.trim().length() == 0) { pname = nbaplayer.getPname(); } // 국가 입력받기 System.out.println("수정하지 않으려면 Enter"); System.out.println("팀 입력(이전-" + nbaplayer.getPteam() + "):"); if(pteam.trim().length() == 0) { pteam = nbaplayer.getPteam(); } // 최대득점 입력받기 System.out.println("수정하지 않으려면 Enter"); System.out.println("최대득점 입력(이전-" + nbaplayer.getMaxscore() + "):"); temp = sc.nextLine(); if(temp.trim().length() == 0) { maxscore = nbaplayer.getMaxscore(); }else { maxscore = Integer.parseInt(temp); } // 총득점 입력받기 System.out.println("수정하지 않으려면 Enter"); System.out.println("총득점 입력(이전-" + nbaplayer.getSumscore() + "):"); temp = sc.nextLine(); if(temp.trim().length() == 0) { sumscore = nbaplayer.getSumscore(); }else { sumscore = Integer.parseInt(temp); } // 평균득점 입력받기 System.out.println("수정하지 않으려면 Enter"); System.out.println("평균득점 입력(이전-" + nbaplayer.getAvgscore() + "):"); temp = sc.nextLine(); if(temp.trim().length() == 0) { avgscore = nbaplayer.getAvgscore(); }else { avgscore = Double.parseDouble(temp); } // 입력받은 데이터를 하나로 만들기 nbaplayer.setPname(pname); nbaplayer.setPteam(pteam); nbaplayer.setMaxscore(maxscore); nbaplayer.setSumscore(sumscore); nbaplayer.setAvgscore(avgscore); result = dao.updateNBAPlayer(nbaplayer); if(result >0) { System.out.println("수정 성공"); }else { System.out.println("수정 실패"); } } break; |
12. 부분일치 검색
=> 부분일치는 like와 wildcard 문자 이용
% : 글자 수와 상관없음
_ : 아무 글자나 1글자와 매칭
pteam이 H로 시작하는 : pteam like 'H%'
pteam이 s로 끝나는 : pteam like '%s';
pteam이 s가 포함되는 : pteam like '%s%';
pteam이 s로 끝나는 2글자 : pteam like '_s';
=> 부분일치하는 데이터를 찾으면 0개 이상으로 봐야한다.
데이터베이스에서 조회할 때는 0또는 1개(1개) 아니면 0개 이상(n개)이냐로 구분
1) DAO 클래스에 선수이름이나 팀이름으로 검색어가 포함된 데이터를 찾아오는 메소드를 생성
public List searchNBAPlayer(String word){ List list = new ArrayList(); connect(); try { pstmt = con.prepareStatement("select * from nbaplayer where pname like ? or pteam like ?"); pstmt.setString(1, "%" + word + "%"); pstmt.setString(2, "%" + word + "%"); ResultSet rs = pstmt.executeQuery(); while(rs.next()) { NBAPlayer nbaplayer = new NBAPlayer(); nbaplayer.setNum(rs.getInt("num")); nbaplayer.setPname(rs.getString("pname")); nbaplayer.setPteam(rs.getString("pteam")); nbaplayer.setMaxscore(rs.getInt("maxscore")); list.add(nbaplayer); } rs.close(); }catch(Exception e) { System.out.println("데이터 검색 실패"); System.out.println(e.getMessage()); e.printStackTrace(); } close(); return list; } |
2) Main 클래스에 case 4 구문 작성
case "4": System.out.print("조회할 대륙이나 국가:"); temp = sc.nextLine(); list = dao.searchNBAPlayer(temp); if(list.size() == 0) { System.out.println("조회된 데이터가 없습니다."); }else { for(NBAPlayer imsi : list) { System.out.printf("%5d\t%10s\t%10s\t%10d\n", imsi.getNum(), imsi.getPname(), imsi.getPteam(), imsi.getMaxscore()); } } |
13.paging 구현
=>조회한 데이터가 많을 때 페이지 단위로 나누어서 출력
전체 데이터 개수 와 페이지 당 출력 개수를 알면 페이지 개수를 구할 수 있음
=>페이지 개수 구하기: (int)((double)전체데이터개수/페이지당출력개수 + (double)(페이지당출력개수-1)/페이지당출력개수)
페이지당 출력개수 : 10
전체 데이터 개수: 100개 - 10page : (int)((double)100/10 + (9.0)/10)
전체 데이터 개수: 101개 - 11page : (int)((double)101/10 + (9.0)/10)
=>나누었을 때 소수가 있으면 자리올림을 해야 합니다.
1)전체 데이터 개수를 구하는 메소드를 DAO 클래스에 생성
//전체 데이터 개수를 구하는 메소드 |
case "2": //전체 데이터 개수 가져오기 int cnt = dao.getCount(); System.out.println("데이터개수:" + cnt); //페이지 수 만들기 - 페이지당 데이터 개수는 2 int pagesu = (int)((double)cnt/2 + (double)(2-1)/2); System.out.println("페이지개수:" + pagesu); break; |
2) 페이지 번호와 페이지 당 데이터 개수를 매개변수로 받아서 페이지 번호에 해당하는 데이터를 조회하는 메소드를 DAO에 구현
=> MySQL에서 원하는 워치의 원하는 개수만큼 데이터를 가져오는 방법은 limit select 구문을 완성하고 맨 뒤에 limit 시작번호 데이터개수를 추가해주면 된다.
select * from nbaplayer limit 0,2;
public List pageNBAPlayer(int pageno, int pagecnt){ List list = new ArrayList(); connect(); try { pstmt = con.prepareStatement("select * from nbaplayer limit ?, ?"); pstmt.setInt(1, pagecnt*(pageno-1)); pstmt.setInt(2, pagecnt); ResultSet rs = pstmt.executeQuery(); while(rs.next()) { NBAPlayer nbaplayer = new NBAPlayer(); nbaplayer.setNum(rs.getInt("num")); nbaplayer.setPname(rs.getString("pname")); nbaplayer.setAvgscore(rs.getDouble("avgscore")); list.add(nbaplayer); } rs.close(); }catch(Exception e) { System.out.println("데이터 검색 실패"); System.out.println(e.getMessage()); e.printStackTrace(); } close(); return list; } |
3) Main의 페이징 관련 case 구문 작성
case "2": //전체 데이터 개수 가져오기 int cnt = dao.getCount(); //System.out.println("데이터개수:" + cnt); //페이지 수 만들기 - 페이지당 데이터 개수는 2 int pagesu = (int)((double)cnt/2 + (double)(2-1)/2); //System.out.println("페이지개수:" + pagesu); //첫번째 페이지의 데이터 가져오기 list = dao.pageNBAPlayer(1, 2); for(NBAPlayer imsi : list) { System.out.println(imsi); } while(true) { //조회할 페이지 번호 입력받기 System.out.print("페이지 번호(1-" + pagesu + ") 종료는 0:"); temp = sc.nextLine(); try { int pageno = Integer.parseInt(temp); if(pageno == 0) { break; }else if(pageno >= 1 && pageno <= pagesu) { //pageno 페이지의 데이터 가져와서 출력 list = dao.pageNBAPlayer(pageno, 2); for(NBAPlayer imsi : list) { System.out.println(imsi); } }else { System.out.println("잘못된 페이지 번호"); } }catch(Exception e) { System.out.println("페이지 번호는 숫자로 입력하세요!!!"); } } break; |
4) Main의 case 수정
=> 전통적인 PC용 웹 브라우저에서 조회하는 형태는 페이지 번호를 하단에 출력해서 페이지 번호를 클릭하면 페이지 번호에 해당하는 데이터를 조회할 수 있도록 해 주었다.
=> Mobile에서는 페이지 번호를 정확하게 터치하는게 어렵기 때문에 페이지 번호를 출력하는 구조는 사용하지 않고 실제 다음에 조회할 데이터는 특별한 경우가 아니면 바로 다음 페이지의 데이터다.
최근에는 특정 이벤트를 만나면 다음 페이지의 데이터를 출력하는 형식을 많이 사용한다.
case "2": //전체 데이터 개수 가져오기 int cnt = dao.getCount(); //System.out.println("데이터개수:" + cnt); //페이지 수 만들기 - 페이지당 데이터 개수는 2 int pagesu = (int)((double)cnt/2 + (double)(2-1)/2); //System.out.println("페이지개수:" + pagesu); //첫번째 페이지의 데이터 가져오기 list = dao.pageNBAPlayer(1, 2); for(NBAPlayer imsi : list) { System.out.println(imsi); } while(true) { //조회할 페이지 번호 입력받기 System.out.print("페이지 번호(1-" + pagesu + ") 종료는 0:"); temp = sc.nextLine(); try { int pageno = Integer.parseInt(temp); if(pageno == 0) { break; }else if(pageno >= 1 && pageno <= pagesu) { //pageno 페이지의 데이터 가져와서 출력 list = dao.pageNBAPlayer(pageno, 2); for(NBAPlayer imsi : list) { System.out.println(imsi); } }else { System.out.println("잘못된 페이지 번호"); } }catch(Exception e) { System.out.println("페이지 번호는 숫자로 입력하세요!!!"); } } break; |
//전체 데이터 개수 가져오기
int cnt = dao.getCount();
//System.out.println("데이터개수:" + cnt);
//페이지 수 만들기 - 페이지당 데이터 개수는 2
int pagesu =
(int)((double)cnt/2 + (double)(2-1)/2);
//System.out.println("페이지개수:" + pagesu);
//첫번째 페이지의 데이터 가져오기
list = dao.pageNBAPlayer(1, 2);
for(NBAPlayer imsi : list) {
System.out.println(imsi);
}
while(true) {
//조회할 페이지 번호 입력받기
System.out.print(
"페이지 번호(1-" + pagesu + ") 종료는 0:");
temp = sc.nextLine();
try {
int pageno = Integer.parseInt(temp);
if(pageno == 0) {
break;
}else if(pageno >= 1 && pageno <= pagesu) {
//pageno 페이지의 데이터 가져와서 출력
list = dao.pageNBAPlayer(pageno, 2);
for(NBAPlayer imsi : list) {
System.out.println(imsi);
}
}else {
System.out.println("잘못된 페이지 번호");
}
}catch(Exception e) {
System.out.println(
"페이지 번호는 숫자로 입력하세요!!!");
}
}
break;
//전체 데이터 개수 가져오기
int cnt = dao.getCount();
//System.out.println("데이터개수:" + cnt);
//페이지 수 만들기 - 페이지당 데이터 개수는 2
int pagesu =
(int)((double)cnt/2 + (double)(2-1)/2);
//System.out.println("페이지개수:" + pagesu);
//첫번째 페이지의 데이터 가져오기
list = dao.pageNBAPlayer(1, 2);
for(NBAPlayer imsi : list) {
System.out.println(imsi);
}
while(true) {
//조회할 페이지 번호 입력받기
System.out.print(
"페이지 번호(1-" + pagesu + ") 종료는 0:");
temp = sc.nextLine();
try {
int pageno = Integer.parseInt(temp);
if(pageno == 0) {
break;
}else if(pageno >= 1 && pageno <= pagesu) {
//pageno 페이지의 데이터 가져와서 출력
list = dao.pageNBAPlayer(pageno, 2);
for(NBAPlayer imsi : list) {
System.out.println(imsi);
}
}else {
System.out.println("잘못된 페이지 번호");
}
}catch(Exception e) {
System.out.println(
"페이지 번호는 숫자로 입력하세요!!!");
}
}
break;
//전체 데이터 개수 가져오기
int cnt = dao.getCount();
//System.out.println("데이터개수:" + cnt);
//페이지 수 만들기 - 페이지당 데이터 개수는 2
int pagesu =
(int)((double)cnt/2 + (double)(2-1)/2);
//System.out.println("페이지개수:" + pagesu);
//첫번째 페이지의 데이터 가져오기
list = dao.pageNBAPlayer(1, 2);
for(NBAPlayer imsi : list) {
System.out.println(imsi);
}
while(true) {
//조회할 페이지 번호 입력받기
System.out.print(
"페이지 번호(1-" + pagesu + ") 종료는 0:");
temp = sc.nextLine();
try {
int pageno = Integer.parseInt(temp);
if(pageno == 0) {
break;
}else if(pageno >= 1 && pageno <= pagesu) {
//pageno 페이지의 데이터 가져와서 출력
list = dao.pageNBAPlayer(pageno, 2);
for(NBAPlayer imsi : list) {
System.out.println(imsi);
}
}else {
System.out.println("잘못된 페이지 번호");
}
}catch(Exception e) {
System.out.println(
"페이지 번호는 숫자로 입력하세요!!!");
}
}
break;
//전체 데이터 개수 가져오기
int cnt = dao.getCount();
//System.out.println("데이터개수:" + cnt);
//페이지 수 만들기 - 페이지당 데이터 개수는 2
int pagesu =
(int)((double)cnt/2 + (double)(2-1)/2);
//System.out.println("페이지개수:" + pagesu);
//첫번째 페이지의 데이터 가져오기
list = dao.pageNBAPlayer(1, 2);
for(NBAPlayer imsi : list) {
System.out.println(imsi);
}
// 현재 페이지 번호 저장
int pageno = 1;
while(true) {
// 아무키나 누르고 Enter 치면 종료
// 그냥 Enter 치면 다음 페이지의 데이터도 가져와서 출력하기
System.out.println("아무키나 누르면 종료");
System.out.print("Enter만 누르면 다음페이지 데이터 가져오기");
temp = sc.nextLine();
if(temp.trim().length() == 0) {
pageno = pageno+1;
if(pageno < pagesu) {
System.out.println("더이상 가저욜 데이터 없음");
}else {
// pageno 에 해당하는 데이터 가져오기
List<NBAPlayer>currentData = dao.pageNBAPlayer(pageno, 2);
// 위의 데이터를 list에 추가
list.addAll(currentData);
// 출력
for(NBAPlayer imsi : list) {
System.out.println(imsi);
}
}
}else {
break;
}
}
break;