JDBC공부 2021-02-22
프젝트 발표 끝 학원 종강
개인 프로젝트 준비공부 시작 기간
뉴렉처 JDBC 17강 시작
공지사항 메뉴 붙이기
inputNoticeMenu() 메소드로 스캐너에서 받은 정보를 리턴해준다.
5번은 종료 설정
EXIT라는 라벨을 사용해서 while 무한 반복문을 실행하고
5번을눌러 break EXIT 사용시 while문을 빠져나가게 설정
스캐너에서 받은 menu가 1~4 값을 벗어날경우를 대비해 default 설정
게시물 목록이 나오는 갯수 조정
데이터베이스에서 SELECT 문으로 조회시
아이디 옆에 보이는 번호
일련번호를 뽑을수있는 내부적인 컬럼 ROWNUM 를 사용해야한다.
하지만 ROWNUM는 서브쿼리를 만들어 놓고 사용하지 않을시 WHERE절에서 1 이후의 숫자부터는 조회가힘드니
서브쿼리를 만들어 줘야한다.
최신글을 페이지 1번으로 옮기기위한 정렬이 필요함 (정렬을하고 일련번호를 나열해야한다.) 또한번의 서브쿼리가 필요
목록의 갯수를 최신날짜별로 10개씩 조회하기위한 페이징 쿼리문
페이징 쿼리 이용하기
page를 처리하기위해 받아오는 매개변수를 설정한뒤
start 값과 end값을 가지고있는 변수를 만들어준다 page를 받아와 값을 계산
PreparedStatement 로 ? 입력한 sql을 받아와 변수값을 넣어준다.
페이지를 입력해 getList를 불러오면 1페이지 의 10개의 목록이 조회되는것을 볼수있다.
목록을 위한 View 생성하기
View를 이용해 조금더 효과적으로 페이징 쿼리문 처리방법
조건에 맞는 View를 생성해주고 SELECT 조회를 뷰를통해 BETWEEN을 한다.
View를 만들어두면 보다 깔끔한 sql 문을 만들 수 있다.
이전 / 다음 구현하기
이전 페이지와 다음페이지를 구하기위해서는 현재페이지의 위치를 알아야한다.
현재 페이지를 알수있는 page변수는 NoticeConsole 클래스에 만들어 주었다.
Program5 클래스의 Switch 문을 수정해준다.
이전을 누르면 이전의 페이지로 이동할수있는 NoticeConsole 클래스의 movPrevList() 메소드와
다음을 누르면 다음 페이지로 이동할수있는 NoticeConsole 클래스의 moveNextList() 메소드를 불러오고
메소드를 만들어준다.
NoticeConsole 클래스의 메소드
moveNextList()의 다음페이지가 없습니다 출력 문구는 마지막 페이지값을 얻어 사용해야하기때문에 임시 주석처리
게시글 갯수 구하기
현재 임시로 넣어둔 목록에 나타난 게시글의 갯수를 구하기위해서는 NoticeConsole클래스에
게시판의 개수를 알수있는 count 라는 변수를 선언하고 출력되게한다.
count의 개수를 구하기위해서는 데이터베이스의 연결을 받아서 구해와야하기때문에
NoticeService의 getCount() 메소드를 받아온다.
게시글은 항시 등록과 삭제가 되어 숫자가 변할수 있기때문에 항상 조회전에 값을 계속 구해와야한다.
Notice의 getCount메소드
count변수를 만들고 기본값을 0으로 준 뒤
오라클과 연결을 시켜 sql 문으로 조회를 한다.
COUNT(ID)로 아이디의 개수를 조회 (별칭은 COUNT)로 준다.
*실무에서 Scalar값을 얻어오는 함수를 만들라는 말은
현재 단위값을 얻어오는 메소드를 만들어라 라는 말과 같다.
별칭을 이용해 count 값을 받아온다(별칭을 안줬을시에는 COUNT(ID)라는 컬럼명으로 나오기 때문)
별칭을 주지 않았다면 "COUNT(ID)"값을 받아와야한다.
현재 작성된 게시물의 갯수가 구해진다.
마지막 페이지 구하기
앞서 전역변수에 입력한 count 변수는 사실상 값이 항상 달라질수도 있기 때문에
지역내에서 쓰는게 옳다 (lastPage 도 마찬가지)
lastPage 같은 경우에는 count/10을 해준다면 100->10, 90->9 같은경우에 딱 떨어지지만
93->9같은 경우에는 나머지 게시물들은 제외되기때문에
나머지값을 확인하는 삼항연산자로 나머지 게시물이 있을경우에도 사용할수있게 만들어준다.
전에 마지막페이지 값을 모르기때문에 주석처리 해놓았던
NoticeConsole 클래스의 moveNextList() 메소드
현재페이지가 마지막페이지였을때 return 해주는 메소드를 만들어준다
이때 lastPage는 지역변수로 선언되었고
moveNextList()메소드가 호출할때와 printNoticeList() 메소드가 호출할때의 값이
달라질수도 있기때문에 여기서도 service.getCount() 메소드를 호출에 새 값을 받아준다.
결과 콘솔 화면
검색메뉴 붙이기
검색을 위한 메뉴 추가
종료를 6번으로 옮기고 수정해준다.
검색을 위한 inputSearchWord() 메소드를 만들어준다.
Scanner를 불러와 사용자의 문자열을 받게하고
검색하기 위해서 검색범주와 검색어는 모든 메소드가 공유해야하기 때문에 전역변수로 만들어준다.
기본값은 null로 설정한다.
검색 서비스 추가하기
검색을 받아오기 위한 수정 printNoticeList()메소드의 인자값
받아온 field 값은 ? 이용해 PreparedStatment로 값을 입력시
'TITLE' 이런형식으로 입력이되기 때문에 +field+ 로 입력해준다.
query도 마찬가지로 setString 할때 "%"+query+"%" 이런 형식으로 입력 해줘야한다.
현재 미완성 상태.
뉴렉처 JDBC강의 (25강 현재완)
느낀점
JDBC 강의 올라온거 까지는 완 추후에 더 수업이 진행하면 이어서 들을것
유익하다. 데이터베이스와 코드와 연결고리를 찾을수있었다.