만사가귀찮다
38
2021-02-27 03:17:17 작성 2021-02-27 10:36:00 수정됨
5
281

jsp 검색 기능 구현중인데 제발 부탁드려요 ㅜㅜㅜㅜㅜㅜ 제발요 ㅜㅜㅜㅜ 봐주세요 사진도 넣어써용


DAO 검색기능 method 입니다.

	public ArrayList<ProjectBoardVO> getAllSearch(String col, String word){
			
		ArrayList<ProjectBoardVO> list = new ArrayList<ProjectBoardVO>();
		
		
		try {
			
		  if(col.equals("none")) {
				sb.setLength(0);
				sb.append("select post_no, user_id, title, contents, hits, write_date, likes, writer, board_type, latitude, longitude ");
				sb.append("from project_board ");
				sb.append("where user_id like ? or title like ? or user_id like ? or writer like ? ");
				sb.append("order by post_no desc ");
				pstmt = conn.prepareStatement(sb.toString());
				pstmt.setString(1, "%" + word + "%");
				pstmt.setString(2, "%" + word + "%");
				pstmt.setString(3, "%" + word + "%");
				pstmt.setString(4, "%" + word + "%");
		 
		  } else if(col.equals("post_no")) {
			  	
			  sb.setLength(0);
			  sb.append("select post_no, user_id, title, contents, hits, write_date, likes, writer, board_type, latitude, longitude ");
			  sb.append("from project_board ");
			  sb.append("where post_no like ? ");
			  sb.append("order by post_no desc ");
			  pstmt = conn.prepareStatement(sb.toString());
			  pstmt.setString(1, "%" + word + "%");
		  
		  } else if(col.equals("title")) {
			  sb.setLength(0);
			  sb.append("select post_no, user_id, title, contents, hits, write_date, likes, writer, board_type, latitude, longitude ");
			  sb.append("from project_board ");
			  sb.append("where title like ? ");
			  sb.append("order by post_no desc ");
			  pstmt = conn.prepareStatement(sb.toString());
			  pstmt.setString(1, "%" + word + "%");
		 
		  } else if(col.equals("user_id")) {
			  sb.setLength(0);
			  sb.append("select post_no, user_id, title, contents, hits, write_date, likes, writer, board_type, latitude, longitude ");
			  sb.append("from project_board ");
			  sb.append("where user_id like ? ");
			  sb.append("order by post_no desc ");
			  pstmt = conn.prepareStatement(sb.toString());
			  pstmt.setString(1, "%" + word + "%");
		 
		  } else if(col.equals("writer")) {
			  sb.setLength(0);
			  sb.append("select post_no, user_id, title, contents, hits, write_date, likes, writer, board_type, latitude, longitude ");
			  sb.append("from project_board ");
			  sb.append("where writer like ? ");
			  sb.append("order by post_no desc ");
			  pstmt = conn.prepareStatement(sb.toString());
			  pstmt.setString(1, "%" + word + "%");
		  } else {
              sb.append(" SELECT post_no, user_id, title, contents, hits, write_date, likes, writer, board_type, latitude, longitude ");
              sb.append(" FROM project_board ");
              sb.append(" ORDER BY post_no DESC");
              pstmt = conn.prepareStatement(sb.toString());
		  }
		  
			
				
			rs = pstmt.executeQuery();  
				
			while(rs.next()) { 
				int post_no = rs.getInt("post_no");				
				String user_id = rs.getNString("user_id");
				String title = rs.getNString("title");
				String contents = rs.getNString("contents");
				int hits = rs.getInt("hits");								
				String write_date = rs.getNString("write_date");
				int likes = rs.getInt("likes");
				String writer = rs.getNString("writer");
				String board_type = rs.getNString("board_type");
				String latitude = rs.getNString("latitude");
				String longitude = rs.getNString("longitude");
					
				ProjectBoardVO vo = new ProjectBoardVO(post_no, user_id, title, contents, hits, write_date, likes, writer, board_type, latitude, longitude);
					
				list.add(vo);
				
		}
			}	catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
				return list;
		
	}// getAllSearch() end


여기요 ! getAlldata 전체데이터 가져오기 .. 인데 이제보니까 getallsearch랑 겹치긴 하는데

엄 .. 문제가 있을까용 

	public ArrayList<ProjectBoardVO> getAlldata(int StartNo, int EndNo){
		
		ArrayList<ProjectBoardVO> list = new ArrayList<ProjectBoardVO>();
		sb.setLength(0);
		sb.append("select * ");
		sb.append("from (select rownum rn, post_no, user_id, title, contents, hits, write_date, likes, writer, board_type, latitude, longitude " );
		sb.append("from (select * from project_board ");
		sb.append("order by post_no desc ) ");
		sb.append("where rownum <= ? ) ");
		sb.append("where rn >= ? ");
		
		try {
			pstmt = conn.prepareStatement(sb.toString());
			pstmt.setInt(1, EndNo);
			pstmt.setInt(2, StartNo);
			
			rs = pstmt.executeQuery(); // 지금 이부분이 전체 데이터 조회 
			
			while(rs.next()) { 
				int post_no = rs.getInt("post_no");				
				String user_id = rs.getNString("user_id");
				String title = rs.getNString("title");
				String contents = rs.getNString("contents");
				int hits = rs.getInt("hits");			
				String write_date = rs.getNString("write_date");
				int likes = rs.getInt("likes");
				String writer = rs.getNString("writer");
				String board_type = rs.getNString("board_type");
				String latitude = rs.getNString("latitude");
				String longitude = rs.getNString("longitude");
				
				ProjectBoardVO vo = new ProjectBoardVO(post_no, user_id, title, contents, hits, write_date, likes, writer, board_type, latitude, longitude);
				
				list.add(vo);
			
		}
			}	catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
				return list;
	
	}// getAlldate() end



// 여긴 목록 부분이구요. 

<%
	// 페이징 처리
	String cp = request.getParameter("cp");
	
	ProjectBoardDAO dao = new ProjectBoardDAO();
	
	int currentPage = 0;

	
	if(cp!=null){
		currentPage = Integer.parseInt(cp);
	}else {
		currentPage = 1;
	}
	

	int totalCount = dao.getPagingData();

	int recordByPage = 10;
	

	int totalPage = 
		(totalCount%recordByPage==0)?totalCount/recordByPage:totalCount/recordByPage+1;
	
	int StartNo = (currentPage-1)*recordByPage+1;
	

	int EndNo = currentPage*recordByPage;
	

	

%>

</head>
<body>
	<table>
		<tr>
			<th class="post_no">번호</th>
			<th class="user_id">유저 아이디</th>
			<th class="title">제목</th>
			<th class="writer">작성자</th>
			<th class="likes">좋아요</th>
			<th class="hits">조회수</th>
		</tr>
	
	 	<%
			ArrayList<ProjectBoardVO> list = dao.getAlldata(StartNo, EndNo);			

			for(ProjectBoardVO vo : list){		
		%>
		<tr>
			<td class="post_no"><%=vo.getPost_no() %></td>
			<th><%=vo.getUser_id() %></th>
			<td class="title">
				<a href="ProjectDetail.jsp?post_no=<%=vo.getPost_no() %>"><%=vo.getTitle() %></a>
			</td> 
			<td class="writer"><%=vo.getWriter() %></td>
			<th class="likes"><%=vo.getLikes() %></th>
			<th class="hits"><%=vo.getHits() %></th>
		</tr>
		<%
			}// for end		
		%> 
		<tr>
			<td colspan="6" id="pageList">
				<%
					for(int i=currentPage-3; i<currentPage+3; i++){		
						if(i<=0){
							continue;
						}else if(i>totalPage){
							break;
						}else {
							
				%>			
					<a href="ProjectList.jsp?cp=<%=i %>"><span id="paging"><%=i %></span></a>
				<%
						}// if end
					}// for end				
				 %>		
			</td>
			
		</tr>
		
		
		
		<tr>
			<td colspan="6" class="btn">
				<a href="ProjectWrite.jsp"><input type="button" value="등록" class="등록" /></a>
				<jsp:include page="search.jsp"></jsp:include>
			</td>
		</tr>
<form action="ProjectList.jsp?cp " method="get" name="frm">
	<select name="col">
		<option >전체 내용</option>
		<option >게시판 번호</option>
		<option >제목</option>
		<option >아이디</option>
		<option >닉네임</option>
	</select>
		<input type="text" name="word" /><input type="submit" value="검색" id="searchBtn"/>
</form>
</body>
</html>


이건 이제 .. Project List값 넘겨받은 곳 이구요. 

하다하다 너무 안돼서 그냥 어느 블로그에서 다 뱃겨오긴 했는데요 ;

Tool.CheckNull 은 Tool 이라는 클래스 만들어서 그 블로그에 설명 해놓으신 것처럼

값이 null 이면 "" 반환 하도록 메소드 만들어놓은 상태에서

값 넘겨받아 왔습니다.

<%

	String col = Tool.CheckNull(request.getParameter("col"));
	String word = Tool.CheckNull(request.getParameter("word"));
	
	ProjectBoardDAO dao = new ProjectBoardDAO();
	ArrayList<ProjectBoardVO> list = dao.getAllSearch(col, word);
	
%>


주소창에는 검색을 하면

http://localhost:9090/please/ProjectJsp/ProjectList.jsp?col=%EC%A0%84%EC%B2%B4+%EB%82%B4%EC%9A%A9&word=123

엥 뭐야 달라지네 아무튼간 저렇게 검색어에 123 입력하면 word=123 하면서

값은 받아가는데요 저게 페이징 처리가 같이 안돼서 페이지가 안옮겨지는건지

아니면 네 .. 뭐가 틀린건지 아무튼간 검색을 하면 .. ex) ㅇㅇㅇ 라고 검색을 하면

ㅇㅇㅇ 라는 데이터를 하나만 띄어서 찾아주었으면 좋겠는데 

그처리를 안해서 그런건가요 ? 아니면 로직이 틀린걸까요. 뭐가 되고는 있는건지

너무 오랜시간 들여다 보고 있었더니 좀 멍하네요 .. ; 

아무튼간 틀린게 있는지 없는지 좀 봐주시면 너무 너무 너무 감사할것같습니다 ㅜㅜㅜ


아 오류는 안떠요. 




정확히 하고싶은건 검색을 저렇게 하면 DDDDD 라는 정보 하나만 남고 빨간 줄들은 다 없어졌으면

좋겠는데, 그게 안돼고 있다보니까 뭘 잘못한건지.. 다음 2 페이지에 있는걸 검색해봐도 

2로는 못넘어가고 그냥 .. 네 그대로 있더라구요. 

넵 .. 이걸 하고싶어요 검색을 하면 원하는 정보만 딱 !. 검색을 하면 다음페이지에 있는것도 딱 찾아가서 ..아 찾아갈 필요가 없나 .. 아무튼간 운하는 정보만 딱 .. 하나만 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

0
  • 답변 5

  • 실크론
    242
    2021-02-27 10:07:27
    dao.getAlldata(StartNo, EndNo) 
    이 부분은 dao에 소스가 없나요?
  • 만사가귀찮다
    38
    2021-02-27 10:34:35

    아 올릴게요 ! 필요 없다 판단을 했어요 



    	public ArrayList<ProjectBoardVO> getAlldata(int StartNo, int EndNo){
    		
    		ArrayList<ProjectBoardVO> list = new ArrayList<ProjectBoardVO>();
    		sb.setLength(0);
    		sb.append("select * ");
    		sb.append("from (select rownum rn, post_no, user_id, title, contents, hits, write_date, likes, writer, board_type, latitude, longitude " );
    		sb.append("from (select * from project_board ");
    		sb.append("order by post_no desc ) ");
    		sb.append("where rownum <= ? ) ");
    		sb.append("where rn >= ? ");
    		
    		try {
    			pstmt = conn.prepareStatement(sb.toString());
    			pstmt.setInt(1, EndNo);
    			pstmt.setInt(2, StartNo);
    			
    			rs = pstmt.executeQuery(); // 지금 이부분이 전체 데이터 조회 
    			
    			while(rs.next()) { 
    				int post_no = rs.getInt("post_no");				
    				String user_id = rs.getNString("user_id");
    				String title = rs.getNString("title");
    				String contents = rs.getNString("contents");
    				int hits = rs.getInt("hits");			
    				String write_date = rs.getNString("write_date");
    				int likes = rs.getInt("likes");
    				String writer = rs.getNString("writer");
    				String board_type = rs.getNString("board_type");
    				String latitude = rs.getNString("latitude");
    				String longitude = rs.getNString("longitude");
    				
    				ProjectBoardVO vo = new ProjectBoardVO(post_no, user_id, title, contents, hits, write_date, likes, writer, board_type, latitude, longitude);
    				
    				list.add(vo);
    			
    		}
    			}	catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    				return list;
    	
    	}// getAlldate() end


  • 실크론
    242
    2021-02-27 18:27:52 작성 2021-02-27 18:31:21 수정됨

    try {

      sb.setLength(0);

      sb.append("select post_no, user_id, title, contents, hits, write_date, likes, writer, board_type,                   latitude, longitude ");

      sb.append("from project_board ");

           if(col.equals("none")) {

    sb.append("where user_id like ? or title like ? or user_id like ? or writer like ? ");

                                     sb.append("and rownum <= ? ) ");

                                    sb.append("and rn >= ? ");

    sb.append("order by post_no desc ");

    pstmt = conn.prepareStatement(sb.toString());

    pstmt.setString(1, "%" + word + "%");

    pstmt.setString(2, "%" + word + "%");

    pstmt.setString(3, "%" + word + "%");

    pstmt.setString(4, "%" + word + "%");

                                    pstmt.setInt(5, "%" + EndNo+ "%");

    pstmt.setInt(6, "%" + StartNo + "%");

     

      } 


    <form action="ProjectList.jsp?cp " method="get" name="frm">

    <select name="col">

    <option >전체 내용</option>

    <option >게시판 번호</option>

    <option >제목</option>

    <option >아이디</option>

    <option >닉네임</option>

    </select>

    <input type="text" name="word" />

    <input type="submit" value="검색" id="searchBtn"/>

    <input type="hidden" name="StartNo" value="StartNo">

    <input type="hidden" name="EndNo" value="EndNo">

    </form> . 이런식으로  폼에 스타트하고 끝번호를 보내주시고 getAllSearch에 파라미터 추가하시고 받아주시면 검색하면서 페이징 한 결과값을 가지고하면 될꺼같아요

    0


  • 피자7
    637
    2021-02-27 18:54:54

    우에에엥 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

  • 만사가귀찮다
    38
    2021-02-27 18:58:44

    감사합니다 실크론님. 잘 해결됬습니다 ㅎㅎ

  • 로그인을 하시면 답변을 등록할 수 있습니다.