- 2019/09/09 2. 검색 창2019년 11월 22일
- 조별하
- 작성자
- 2019.11.22.:45
검색창
rownum 활용으로 페이징 만들기
1) 제목과 그룹넘버 순서를 조회
select subject, grpno, ansnum from tb_bbs order by grpno desc, ansnum asc;
2) rownum 추가
select rownum,subject, grpno, ansnum from tb_bbs order by grpno desc, ansnum asc;
3) 1)의 SQL문을 셀프조인 후 rownum추가
select rownum,subject, grpno, ansnum from (select subject, grpno, ansnum from tb_bbs order by grpno desc, ansnum asc )AA;
4) 줄번호 1~5 조회
select rownum,subject,grpno, ansnum from( select subject, grpno, ansnum from tb_bbs order by grpno desc, ansnum asc )AA where rownum>=1 and rownum<=5;
▶ 줄번호 1
5 는 조회가 되는데 56은 조회가 되지 않는다5)줄번호가 있는 3) 의 테이블을 한번 더 셀프조인하고 rownum칼럼명을 rnum으로 바꾼다
select rnum, subject, grpno, ansnum from( select rownum as rnum,subject,grpno,ansnum from( select subject,grpno,ansnum from tb_bbs order by grpno desc, ansnum asc ) ) where rnum>=6 and rnum<=10;
6) 페이징+검색 제목에서 '솔데스크' 검색해서 2페이지 출력
select rnum, subject, grpno, ansnum from( select rownum as rnum,subject,grpno,ansnum from( select subject,grpno,ansnum from tb_bbs where subject like '%솔데스크%' order by grpno desc, ansnum asc ) ) where rnum>=6 and rnum<=10;
검색창 폼 구현
1) 반복문이 끝나는 부분 에 검색창 폼을 만들어 주자
<!-- 데이터가 있어야 검색을 할 수 있으니까 if 안에 넣는다 --> <!-- 검색시작 --> <tr> <td colspan="4" style="text-align:center; height:60px;"> <form method="get" action="bbsList.jsp" onsubmit="return searchCheck(this)"> <select> <option value="wname">작성자 <option value="subject">제목 <option value="content">내용 <option value="subject_content">제목+내용 </select> <input type="text" name="word"> <input type="submit" name="검색"> </form> </td> </tr> <!-- 검색 끝-->
2)검색 제출버튼을 누르면 myscript.js를 거쳐서 지나간다
function searchCheck(w){ var word=w.word.value; word=word.trim(); if(word.length==0){ alert("검색어를 입력하세요"); return false;//서버 전송 불가 }//if end return true; //서버로 전송 }//searchCheck() end
3) 검색 목록(col 칼럼명, word검색어)
칼럼명과 검색어가 공통코드이기 때문에 ssi에 넣어 줄 것 이다
4) col 과 word를 받아서 List 함수가 목록을 조회할 것이다
▶전에 사용하던 list 메소드를 이용해서 매개 변수를 받는 list 메소드를 만들어 준다
public ArrayList<BbsDTO> list(String col, String word){ ArrayList<BbsDTO> list=null; try{ Connection con=DBOpen.getConnection(); StringBuilder sql= new StringBuilder(); sql.append(" SELECT bbsno, wname, subject, readcnt, regdt, indent "); sql.append(" FROM tb_bbs"); if(word.trim().length()>=1){//검색어가 있다면 String search=""; if(col.equals("wname")){ search+=" WHERE wname LIKE '%"+word+"%' "; } if(col.equals("subject")){ search+=" WHERE subject LIKE '%"+word+"%' "; } if(col.equals("content")){ search+=" WHERE content LIKE '%"+word+"%' "; } if(col.equals("subject_content")){ search+=" WHERE subject LIKE '%"+word+"%' "; search+=" OR content LIKE '%"+word+"%' "; } sql.append(search); } sql.append(" ORDER BY grpno DESC,ansnum ASC"); PreparedStatement pstmt=null; pstmt=con.prepareStatement(sql.toString()); ResultSet rs=pstmt.executeQuery(); if(rs.next()){ list=new ArrayList<BbsDTO>(); do{ BbsDTO dto= new BbsDTO(); dto.setBbsno(rs.getInt("bbsno")); dto.setWname(rs.getString("wname")); dto.setSubject(rs.getString("subject")); dto.setReadcnt(rs.getInt("readcnt")); dto.setRegdt(rs.getString("regdt")); dto.setIndent(rs.getInt("indent")); list.add(dto); }while(rs.next()); }else{ list=null; } }catch(Exception e){System.out.println("검색실패!!!"+e);} return list; }//list() end
▶ 똑같은 list 지만 sql문을 작성할때, 조건문을 이용하여
▶ 작성자,제목,내용,작성자+내용 에 맞는 word가 들어오면 search에 넣어서 sql문으로 바꿔준다
★ 여기서 전에 있던 리스트 목록을 사용하지 않고, 새로 만든 list를 사용하는 이유는 전의 기능을 새로만든 메소드가 할 수 있기 때문이다.검색 내용 유지하기
1) list 에서 상세목록으로 넘어 갈때 검색폼에 지정해 주었던, col과 word 값을 넘겨주었다
2)'바보'라는 제목의 글을 검색
3) 상세 페이지에서 목록을 클릭
클릭을 하였을때, 전체목록이 아니라 검색해서 들어온 목록으로 돌아갈 수있게 col 과 word 값을 list 로 보내준다
4) 목록에서 매개변수 col과 word 를 받아 조회
목록 페이지에서는 col과 word를 받아 검색할때 넘겨받은 값을 다시 조회
답변, 수정 , 삭제
검색한 목록창으로 이동하는 것와 같이 답변, 수정, 삭제도 같은 알고리즘으로 구현해 보자(과제)--해결!!
'JAVA 교육 > myWeb' 카테고리의 다른 글
2019/09/10 4. scope (0) 2019.11.22 2019/09/10 3. 페이징 (0) 2019.11.22 2019/09/09 1. 댓글 개수&검색 글 개수 (0) 2019.11.22 2019/09/06 미니 프로젝트 bbs 게시판 (0) 2019.11.22 2019/09/02 프로젝트 (intro&template) (0) 2019.11.22 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)