Posts basic_project-2. 게시물작성 구현
Post
Cancel

basic_project-2. 게시물작성 구현

1. BoardDao 파일

  1. 총 게시물 수 가져오기
  2. 게시판 리스트
  3. 게시물 등록
  4. 게시물 수정
  5. 게시물 삭제
  6. 선택된 게시물에대한 조회
  7. 게시물 조회시 조회카운트 증가
  8. 게시물 번호 조회

총 8가지가 구현되어있는 sql.append를 사용하여 쿼리를 날려 db에 전달하는 dao파일이다.

우선 최근에했던 게시물 등록에대한 메소드를 살펴보려한다.

3번 게시물 등록으로 가보자

2. BoardInsert 게시물 등록

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
32
33
34
35
36
37
38
39
40
41
//게시물 등록
   public int boardInsert(Board board) {
      int count = 0;
      Connection conn = null;
      PreparedStatement pstmt = null;
      StringBuilder sql = new StringBuilder();
      
      sql.append("INSERT INTO TBL_BOARD ");
       sql.append("   (BBS_SEQ, USER_ID, BBS_NAME, BBS_EMAIL, BBS_PWD, BBS_TITLE, BBS_CONTENT, BBS_READ_CNT, REG_DATE) ");
       sql.append("VALUES (?, ?, ?, ?, ?, ?, ?, 0, SYSDATE) ");
      
       try {
          int idx = 0;
          long bbsSeq = 0;
          conn = DBManager.getConnection();
          //시퀀스를 통한 게시물번호 조회
          bbsSeq = newBbsSeq(conn);         //매개변수로 conn객체를 보내기전에 DBManager랑 연결시키고 보내기
          board.setBbsSeq(bbsSeq);
          
          pstmt = conn.prepareStatement(sql.toString());
          
          pstmt.setLong(++idx, bbsSeq);
          pstmt.setString(++idx, board.getUserId());
          pstmt.setString(++idx, board.getBbsName());
          pstmt.setString(++idx, board.getBbsEmail());
          pstmt.setString(++idx, board.getBbsPwd());
          pstmt.setString(++idx, board.getBbsTitle());
          pstmt.setString(++idx, board.getBbsContent());
          
          count = pstmt.executeUpdate();
          
       }
       catch(SQLException e) {
          logger.error("[BoardDao] boardInsert SQLException", e);
       }
       finally {
          DBManager.close(pstmt, conn);
       }
       
      return count;
   }

첫번째로 봐야할부분은 sql문이 어떻게 구성했나이다.

2-1 SQL문 INSERT문 가공하기

1
2
3
INSERT INTO TBL_BOARD 
(BBS_SEQ, USER_ID, BBS_NAME, BBS_EMAIL, BBS_PWD, BBS_TITLE, BBS_CONTENT, BBS_READ_CNT, REG_DATE) 
VALUES (?, ?, ?, ?, ?, ?, ?, 0, SYSDATE);

TBL_BOARD의 INSERT문이다. sql.append를 통해서 최종적으로 conn객체에 담아서 db로 연결하는것이다.

2-2 게시물 번호 조회 bbsSeq

그후 삽입할 게시물번호 위치를 가져오기위한 조회를 해야한다. 그전 db연결을 해서 연결된 계정을 conn에 담고

1
2
3
4
5
try
{
   conn = DBManager.getConnection();  //그전 db연결을 해서 연결된 계정을 conn에 담고
   bbsSeq = newBbsSeq(conn);
}

newBbsSeq 메소드로 가보자

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
//게시물번호 조회(SEQ_BOARD 시퀀스사용)
private long newBbsSeq(Connection conn) {

      long bbsSeq = 0;
      
      PreparedStatement pstmt = null;
      ResultSet rs = null;
      StringBuilder sql = new StringBuilder();
      
      sql.append("SELECT SEQ_BOARD.NEXTVAL FROM DUAL ");
      
      try {
         pstmt = conn.prepareStatement(sql.toString());
         rs = pstmt.executeQuery();
         
         if(rs.next()) {
            bbsSeq = rs.getLong(1);
         }
      }
      catch(SQLException e) {
         logger.error("[BoardDao] newBbsSeq SQLException", e);
      }
      finally {
         DBManager.close(rs, pstmt);
      }
      
      return bbsSeq;
   }

sql.append로 해당시퀀스의 다음값을 더해주고

1
2
3
 if(rs.next()) {
            bbsSeq = rs.getLong(1);
         }

결과값이 있다면 , 결과값의 첫번째 즉, 글개수를 bbsSeq에 담아준다

2-3 SQL 문 실행 prepareStatement

1
2
3
sql.append("INSERT INTO TBL_BOARD ");
       sql.append("   (BBS_SEQ, USER_ID, BBS_NAME, BBS_EMAIL, BBS_PWD, BBS_TITLE, BBS_CONTENT, BBS_READ_CNT, REG_DATE) ");
       sql.append("VALUES (?, ?, ?, ?, ?, ?, ?, 0, SYSDATE) ");

위의 쿼리문에날렸던 값들을 하나씩 ++idx를 하면서 물음표에 값을 넣어준다 이것이 prepareStatement의 사용법이다.

1
2
3
4
5
6
7
8
9
10
11
 pstmt = conn.prepareStatement(sql.toString());
          
          pstmt.setLong(++idx, bbsSeq);
          pstmt.setString(++idx, board.getUserId());
          pstmt.setString(++idx, board.getBbsName());
          pstmt.setString(++idx, board.getBbsEmail());
          pstmt.setString(++idx, board.getBbsPwd());
          pstmt.setString(++idx, board.getBbsTitle());
          pstmt.setString(++idx, board.getBbsContent());
          
          count = pstmt.executeUpdate();

그후 execute를 실행해서 update가 성공하면 1을 반환한다. count = 1 저장

2-4 return count

WriteProc 에서 BoardInsert 를 사용하는곳을 가보자

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
Logger logger = LogManager.getLogger("/board/writeProc.jsp");
   HttpUtil.requestLogString(request, logger);
   
   String cookieUserId = CookieUtil.getValue(request, "USER_ID");
   
   boolean bSuccess = false;
   String errorMsg = "";
   
   String bbsTitle = HttpUtil.get(request, "bbsTitle", "");
   String bbsContent = HttpUtil.get(request, "bbsTitle", "");
   
   if(!StringUtil.isEmpty(bbsTitle) && !StringUtil.isEmpty(bbsContent)) {
      BoardDao boardDao = new BoardDao();
      Board board = new Board();
      
      board.setUserId(cookieUserId);
      board.setBbsTitle(bbsTitle);
      board.setBbsContent(bbsContent);
      
      if(boardDao.boardInsert(board) > 0) {
         bSuccess = true;
      }
      else {
         errorMsg = "게시물 등록중 오류가 발생했습니다.";
      }
   }
   else {
      errorMsg = "게시물 입력 값이 올바르지 않습니다.";
   }

자바부분만 보여줬다. 글작성하는 부분인데

1
2
3
if(boardDao.boardInsert(board) > 0) {
         bSuccess = true;
      }

이부분처럼 Insert에서 값이 1 , 즉 성공했다면 bSuccess가 true가 되서

게시물등록이 성공되었습니다 알림창이되고 그다음 list 로 가는 로직이된다.

3. 게시물에대한 조회

헬로우~

This post is licensed under CC BY 4.0 by the author.