새소식

JAVA 교육/myWeb

2019/09/09 2. 검색 창

  • -

검색창

image

rownum 활용으로 페이징 만들기

1) 제목과 그룹넘버 순서를 조회

select subject, grpno, ansnum
from tb_bbs
order by grpno desc, ansnum asc;

image

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;

image

▶ 줄번호 15 는 조회가 되는데 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;

image

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;

image

검색창 폼 구현

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>

        <!--  검색 끝-->

image

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에 넣어 줄 것 이다
image

4) col 과 word를 받아서 List 함수가 목록을 조회할 것이다

image

▶전에 사용하던 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 값을 넘겨주었다

image

2)'바보'라는 제목의 글을 검색

image

3) 상세 페이지에서 목록을 클릭

image

클릭을 하였을때, 전체목록이 아니라 검색해서 들어온 목록으로 돌아갈 수있게 col 과 word 값을 list 로 보내준다
image

4) 목록에서 매개변수 col과 word 를 받아 조회

image

목록 페이지에서는 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
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.