라이프로그


google 광고


rownum 사용시 여러번 묶어(인라인뷰) 사용하는 이유 공부중,,

select column1, column2... from (
 select rownum rn, column1, column2... from (
               //2. 정렬된 데이터들에 번호를 부여 (rownum)
  select * from board order by ref desc, re_step asc)      //1. 전체 데이터를 정렬
 )
where rn between ? and ?  


3. rownum은 실제 테이블에 없는 컬럼이기 때문에 아래 잘못사용한 예 처럼 사용해 버리면 오류가 발생한다
(where는 테이블에 대한 조건이기 때문)
4. 오류를 방지하기 위해 인라인뷰로 생성해 하나의 테이블처럼 인식하게 만들고 rn을 하나의 컬럼 처럼 사용하게 만든다
5. 그렇게 만들면 제일 외부의 select 절에서 테이블 관련 조건만 처리할 수 있는 where 절에서 rn을 사용할 수 있다.

근데 밖에 있는 select -where 절을 사용하지 않고 안에서 where 절을 사용할 경우 (아래참고)
between의 문제가 발생 1부터는 가능하지만 다른 숫자 입력시 없는 레코드라고 나온다.

-잘못 사용한 예
select rownum rn, column1, column2... from (                   
  select * from board order by ref desc, re_step asc)  
where rn between ? and ?  


게시판에 이용하는경우 between 사이에 1~10 이외에 11~20 의 값이 들어갈경우
오류가 발생하므로 잘~묶어주도록 하자.ㅠ

(위의 두가지 경우를 제대로 확인하려면 게시판 관련 프로그램 작성시 게시글을 30개 이상 작성하고 확인해보자)

------------실제 사용한 sql 문 (확인하고 싶은 사람만 직접 table 등록 후 해보세요.. 안하는게...;;;;ㅋ)
select num, writer, email, subject, passwd, reg_date, readcount, ref, re_step, re_level, content, ip 
from
(select rownum rn,num,writer,email,subject,passwd,reg_date,readcount,ref,re_step,re_level,content,ip 
    from (select * from board order by ref desc, re_step asc))
where rn between ? and ?);

?가 있는건 jsp에서 PrepareStatement class를 사용했음.
------------------------------------------------------------------------------


혹시 제가 잘못 알고 있다면 댓글 ^^;


이클립스 기본소스 자동생성 안될경우 공부중,,

tag File을 생성하는 도중 갑자기 jsp 파일을 만들때 기본적으로 생성되는 소스들이 사라져버렸다
이클립스 갈릴레오 버전에서 생긴 현상
저는 인디고를 쓰고 있어서 이런일이 없었지만 갈릴레오 버전에서는 WEB-INF/tags/.tag 파일 생성시
새로운 파일을 만들 때마다 기본으로 출력되던 소스들이 나오지 않는것.!! ㅠㅠ
(아시는 분들이 많으시겠지만,, 제가 몰랐던이유가 항상 파일이름만 쓰고 finish하는 버릇이 있어서
next로 확인하는 걸 몰랐어요.ㅠㅠ)

해결 방법 !!

1. new>jsp file>파일이름 쓰고 next
2. use jsp template 를 체크 해주고 원하는 템플릿을 선택해 아래 preview를 확인하면 됨!!


[jsp] servlet (html에서 전송시 한글깨짐문제) 2


boardServlet.java---------------------------------------------------------------

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class boardServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;

    public boardServlet() {
        super();
  }
 protected void doPost(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  request.setCharacterEncoding("euc-kr");
  String name=request.getParameter("name");
  String title=request.getParameter("title");
  String content=request.getParameter("content");
  
  response.setContentType("text/html;charset=euc-kr");
  PrintWriter out=response.getWriter();
  
  out.println("<html><head><title>게시판</title></head><body>");
  out.printf("이름 : %s <br> 제목 : %s <br><br>", name, title);
  out.printf("--------------<br><pre>%s</pre><br>-----------------", content);
  out.println("</body></html>");
  
 }

}
-----------------------------------------------------------------------------------
boardServlet.java---------------------------------------------------------------
<body>
 <form action="/ch01/boardServlet" method="post">
  이름 : <input type="text" name="name"><br>
  제목 : <input type="text" name="title"><br><br>
  <textarea rows="5" cols="50" name="content"></textarea><br>
  <input type="submit" value="전송">
  <input type="reset" value="재입력">
 </form>
</body>
-----------------------------------------------------------------------------------




 데이터를 가지고 올때부터 한글깨짐 방지를 위해 
     request.setCharacterEncoding("euc-kr"); 부분을 추가해 주어야 한다.






1 2 3 4 5 6 7 8 9 10 다음


링크단위 가로