티스토리 뷰

 

1. sql-defs.xml 에 추가 컬럼에 대해 기술합니다

먼저 http://www.jakartaproject.com/article/boardfaq/119191128019726 를 참고하여 sql-defs.xml 의 구조를 파악합니다

그 후 추가하고자 하는 테이블에 대해 쿼리를 수정합니다

 

2. VO, FORM 클래스들을 수정합니다

필드를 추가한 쿼리에 해당하는 VO를 수정합니다

VO 클래스의 멤버변수와 그에대한 setter, getter를 추가합니다

FORM 클래스들도 마찬가지 입니다

VO클래스는 데이터베이스에서 값을 가져와 저장해 놓는 클래스이고

FORM 클래스는 사용자가 웹페이지에서 입력한 값을 저장해 놓는 클래스입니다

 

3. DAO 클래스들을 수정합니다

? 추가로 인한 쿼리에 대해 코딩이 필요합니다

 

4. JSP를 수정합니다

추가한 컬럼을 보여주기 위한 JSP의 내용들을 수정합니다

 

 

필드추가예제

Oracle의 Board_t 테이블에 goodbug 컬럼을 추가하겠습니다

 

① sql-defs.xml

  Unicorn은 MySQL과 Oracle 을 지원함으로 각 데이터베이스에 해당하는 쿼리를 수정하셔야 합니다

 오라클 데이터베이스이므로 <database> 태그가 oracle인곳의 Board_t 영역을 수정하셔야 합니다

 오라클 데이터베이스 쿼리들은 sql-defs.xml 의 2819라인부터 기술되어 있습니다

 

 4511라인의 <create_board> 문에 goodbug컬럼을 추가합니다

 

<create_board>

 CREATE board_t (

    boardNo            VARCHAR2(15) NOT NULL,
    boardId            VARCHAR2(32) NOT NULL,
    boardIdx           NUMBER(18) DEFAULT 0,
    boardRef           NUMBER(8) DEFAULT 0,
    boardDep           NUMBER(8) DEFAULT 0,

    ...

    goodbug            VARCHAR2(32)

)

</create_board>

index가 필요하다면 <index_board_07>CREATE INDEX ... </index_board_07> 로 추가를 해줍니다

위의 CREATE와 INDEX 태그는 재설치할 경우 필요하기 때문에 기술해 놓는 것입니다

 

일단 컬럼이 추가되었기 때문에 INSERT 나 UPDATE 문장이 수정되어야 합니다

board_t에 대한 모든 INSERT문장이 수정되어야 합니다

 

<insert_board>
   INSERT INTO board_t (boardNo, boardId, boardIdx, boardRef, boardDep, categoryId, boardIcon, userId, userPw, userNick,
         userIcon, userLevel, userIp, userEmail, userHomepage, userNation, boardTitle, boardContent,
         boardRead_cnt, boardMemo_cnt, boardFile_cnt, boardTag_cnt, boardRate_sum, boardRate_cnt, boardStar_sum,
         boardStar_cnt, boardPoll_cnt, boardLeaf_cnt, boardDelete_fg, boardBest_fg,
         boardTop_fg, boardSecret_fg, boardEdit_fg, boardPollFrom_time, boardPollTo_time, tagName, tagId, thumbnailName, orgUserId,
         boardPoint, boardTimestamp, boardRegister_dt, boardModify_dt, googbug)
   VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,empty_clob(),0,0,?,?,0,0,0,0,?,0,'N','N',?,?,?,?,?,?,?,?,?,?,?,?,?,?)
</insert_board>
<insert_board_01>

   INSERT INTO board_t (boardNo, boardId, boardIdx, boardRef, boardDep, categoryId, boardIcon, userId, userPw, userNick,
         userIcon, userLevel, userIp, userEmail, userHomepage, userNation, boardTitle, boardContent,
         boardRead_cnt, boardMemo_cnt, boardFile_cnt, boardTag_cnt, boardRate_sum, boardRate_cnt, boardStar_sum,
         boardStar_cnt, boardPoll_cnt, boardLeaf_cnt, boardDelete_fg, boardBest_fg,
         boardTop_fg, boardSecret_fg, boardEdit_fg, boardPollFrom_time, boardPollTo_time, tagName, tagId, thumbnailName, orgUserId,
         boardPoint, boardTimestamp, boardRegister_dt, boardModify_dt, goodbug)
   SELECT ?, ?, ?, boardRef, boardDep, null, boardIcon, userId, userPw, userNick,
       userIcon, userLevel, userIp, userEmail, userHomepage, userNation, boardTitle, boardContent,
       boardRead_cnt, boardMemo_cnt, boardFile_cnt, boardTag_cnt, boardRate_sum, boardRate_cnt, boardStar_sum,
       boardStar_cnt, boardPoll_cnt, boardLeaf_cnt, boardDelete_fg, boardBest_fg,
       boardTop_fg, boardSecret_fg, boardEdit_fg, boardPollFrom_time, boardPollTo_time, tagName, tagId, thumbnailName, orgUserId,
       boardPoint, boardTimestamp, boardRegister_dt, boardModify_dt, goodbug
   FROM board_t
   WHERE boardNo = ?
</insert_board_01>

<insert_board>태그와 <insert_board_01> 태그에는 goodbug라는 컬럼을 추가하였고,

이에대한 ? 를 추가하였습니다

? 는 <insert_board>에만 추가되었다는 점은 DAO에서 이 값을 코딩해주어야 함을 의미합니다

 

이처럼 추가 컬럼에 대한 INSERT, UPDATE, SELECT 태그에 대해 해당 쿼리들을 수정해 주세요

INSERT나 UPDATE처럼 ? 가 들어가는 부분들은 DAO에서 코딩이 추가로 필요합니다

 

② VO, FORM 클래스 수정

board_t에 대한 VO클래스는 com.jakartaproject.board.vo.BoardVO.java 입니다

추가된 컬럼에 대해 멤버변수 및 getter, setter를 추가합니다

 

public class BoardVO extends BaseVO implements Cloneable {

 private boolean removeTag;
 private boolean selected;
 private boolean editable;

 ...

 private String goodbug;

 

 ...

 

 public void setGoodbug(String goodbug) {

    this.goodbug = goodbug;

 }

 public String getGoodbug() {

    return goodbug;

 }

 ...

}

만약 goodbug 컬럼의 값을 사용자가 웹페이지에서 입력받는 값이라면 Form 클래스도 VO와 동일하게 추가해 줍니다

com.jakartaproject.board.form.BoardForm.java 를 수정합니다

 

public class BoardForm extends BaseActionForm {
 
 private int boardFile_cnt;
 private int boardPoint;
 private long ipBandWidth;
 private String boardNo;
 private String boardId;
 private String categoryId;

 ...

 private String goodbug;

 

 ...

 

 public void setGoodbug(String goodbug) {

    this.goodbug = goodbug;

 }

 public String getGoodbug() {

    return goodbug;

 }

 ...

}

 

 

③ DAO 클래스를 수정합니다

INSERT 구문에서 ? 가 추가되었음으로 com.jakartaproject.board.dao.BoardOracleDAO.java 를 수정하여야 합니다

DB서버가 오라클임으로 BoardMySqlDAO.java가 아닌 BoardOracleDAO.java를 수정하면 됩니다

<insert_board> 태그에 ?가 추가되었음으로 "insert_board"로 검색해 봅니다

942라인에 query.update("insert_board", params.toArray()); 가 검색되었습니다

params 변수가 insert할 값들을 포함하고 있음으로 이 값 마지막 부분에(컬럼을 제일 마지막에 넣었음으로) goodbug에 대한 값을 추가해 줍니다

 

   params.add(new Integer(("C".equals(boardTypeVO.getBoardType_cd())? boardForm.getBoardPoint():0)));
   params.add(DateUtils.getDate(new Date(), "yyyyMMddHHmmss"));
   params.add(currentTime);
   params.add(currentTime);

   params.add(boardForm.getGoodbug());
   query.update("insert_board", params.toArray());
   
   Clob clob = query.getClob("select_board_100", boardNo);
   writeClob(clob, boardForm.getBoardContent());

 

④ JSP를 수정합니다

이 추가된 컬럼의 값이 글 상세조회 화면에서 뿌려진다면 /jsp/board/skin/default/board_read.jsp 를 수정합니다

 board_t의 VO가 ArrayList 형태의 타입이기 때문에 아래와 같이 적절한 위치에 아래 태그를 추가시켜 주면 됩니다

...

<tr>

 <td><bean:write name="list" property="goodbug"/></td>

</tr>

...

 

생각보다 복잡하네요!

기본적으로 컬럼을 추가하기 위해서는 어느정도 소스파악을 하셔야 합니다 ^^

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함