fairworld's life

개발 Tip 본문

Computer Life/Programming Life

개발 Tip

fairworld 2007. 12. 6. 21:44

1. java.sql.SQLException: ORA-00911: invalid character 시 체크해 봐야 할 1순위

query = "select * from ( select rownum as rnum, A.* from ( select * from TBL_PROGRAM ) A where rownum <= (? * 10) order by rownum desc  ) where rownum <= 10 order by rnum asc;";


쿼리 끝에 ; 있어서 그렇다--;


;빼


2.  계층형 게시판 구현

  1. blogVO.setBltItemOrd(blogDAO.getMaxItemOrd(blogVO.getBltItemGrpCd()));
    blogVO.setReplLvl(blogVO.getReplLvl()+1);

Untitled-1.jpg 

계층형(혹은 답변형) 게시판을 구현하기 위해서는 3가지의 컬럼이 필요하다.

게시물 그룹 코드(답변 게시물들을 위치시키기 위해서), 게시물 그룹내 순서(답변이 달린 순서), 게시물 레벨(들여쓰기 용)

새로운 게시물의 경우 게시물 그룹코드(이하 grp)는 자신의 그룹번호로 넣고

게시물 그룹내 순서(이하 ord)는 0으로

게시물 레벨(이하 lvl)은 0으로 입력한다.

기존 게시물에 답변을 등록하는 경우

게시물 그룹코드는 원글의 그룹코드를 참조하여 입력하고

게시물 그룹내 순서는 현재 참조하는 그룹코드로 아래와 같이 쿼리하여 가져온 값을 입력하고 (게시물 그룹내 가장 큰 값으로 등록)

SELECT MAX(ord)+1 FROM TABLE WHRER grp = ?

게시물 레벨은 원글의 레벨을 참조하여 +1 하여 저장한다.

답변형 게시판 구조로 보여지게 쿼리하여 게시판 구성하는 법

  1.     SELECT BLT_ITEM_TEME, BLT_ITEM_CD, REG_DTHMS, REG_PRSN_NM, INQ_CNT, DEL_YN, ATMT_FILE_YN, REPL_LVL
          FROM TBNYPD16
        #if($vo.searchCondition.equals("0"))
         WHERE BLT_ITEM_TEME LIKE '%' || :vo.searchKeyword || '%'
        #else
         WHERE REG_PRSN_NM LIKE '%' || :vo.searchKeyword || '%'
        #end
         AND DEL_YN LIKE '%' || :vo.delYn || '%'
         AND BLT_BD_CD =:vo.bltBdCd
          ORDER BY REG_DTHMS DESC, BLT_ITEM_GRP_CD DESC, BLT_ITEM_ORD ASC, BLT_ITEM_CD DESC

참고 쿼리에서처럼 그룹코드와 순서를 적절히 배합하여 쿼리가 되도록 한다.


3. 계층형 게시판에서 이전글 다음글 구현

게시물 그룹코드와 게시물 그룹내 순서를 적절히 사용하여 쿼리를 하면 된다.

ROWNUM의 경우 한줄 데이터만을 가져오게 하기 위함

  1. SELECT BLT_ITEM_TEME, BLT_ITEM_CD
        FROM
         (SELECT BLT_ITEM_TEME, BLT_ITEM_CD
            FROM TBNYPD16
          #if($vo.searchCondition.equals("0"))
           WHERE BLT_ITEM_TEME LIKE '%' || :vo.searchKeyword || '%'
          #else
           WHERE REG_PRSN_NM LIKE '%' || :vo.searchKeyword || '%'
          #end
          AND (( BLT_ITEM_GRP_CD =:vo.bltItemGrpCd AND BLT_ITEM_ORD < :vo.bltItemOrd) OR BLT_ITEM_GRP_CD > :vo.bltItemGrpCd)
          AND DEL_YN LIKE '%' || :vo.delYn || '%'
          ORDER BY BLT_ITEM_GRP_CD ASC, BLT_ITEM_ORD DESC)
        WHERE ROWNUM <=1

  1.     SELECT BLT_ITEM_TEME, BLT_ITEM_CD
        FROM
         (SELECT BLT_ITEM_TEME, BLT_ITEM_CD
            FROM TBNYPD16
          #if($vo.searchCondition.equals("0"))
           WHERE BLT_ITEM_TEME LIKE '%' || :vo.searchKeyword || '%'
          #else
           WHERE REG_PRSN_NM LIKE '%' || :vo.searchKeyword || '%'
          #end
          AND (( BLT_ITEM_GRP_CD =:vo.bltItemGrpCd AND BLT_ITEM_ORD > :vo.bltItemOrd) OR BLT_ITEM_GRP_CD < :vo.bltItemGrpCd)
          AND DEL_YN LIKE '%' || :vo.delYn || '%'
          ORDER BY BLT_ITEM_GRP_CD DESC, BLT_ITEM_ORD ASC)
        WHERE ROWNUM <=1

4.  JSP에서 공백 출력

&nbsp; 를 사용하여 출력할 수 있다.

이 글은 스프링노트에서 작성되었습니다.