JAVA/Eclipse

게시판 만들어 보기(특정 게시물 내용을 수정하기) - (5)

luckydadit 2025. 1. 23. 10:47

1. 특정 게시물을 수정하는 기능 만들어보기

Board 테이블의 no 컬럼의 11번 게시물의 정보를 바꾸는 것을 해보겠습니다.

 

 

1.1 Main 클래스 생성하기 (클래스명 : BoardUpdate)

package com.board.main;

 

import java.util.Scanner;

 

import com.board.bean.Board;

import com.board.dao.BoardDao;

 

public class BoardUpdate {

public static void main(String[] args) {

       Scanner sc = new Scanner(System.in); // Scanner 객체를 생성하여 입력 받을 수 있도록 합니다.

 

        System.out.println("글번호 입력 : ");

        int no = sc.nextInt(); // 입력 받은 정수를 정수형 변수 no에 저장합니다. 

 

        BoardDao dao = new BoardDao(); // BoardDao 클래스 객체를 생성함. BoardDao에 메소드를 추가하기 위함입니다.

        int cnt = -99999; // 에러 발생할 때, 체크하기 위한 cnt 변수의 초기값 설정

 

        Board board = new Board(); // Board 클래스 객체를 생성하여 업데이트할 데이터를 담습니다.

        board.setNo(no);

        board.setWriter("lucky");

        board.setPassword("asdf1234");

        board.setSubject("내일은");

        board.setContent("행복의날");

        board.setReadhit(333);

        board.setRegdate("2025/01/23");

 

        cnt = dao.updateData(board); // BoardDao 클래스의 updateData 메소드를 board 객체를 매개변수로 호출합니다.

 

        if(cnt == -99999) { // cnt의 초기값인 -99999일 경우, 실패한 것으로 판단하고 실패한 메세지를 표시합니다.

        System.out.println("게시물 수정 실패");

       }else if(cnt == 0){ // cnt의 값이 0 인 경우, 오류는 없었으나 처리된 내역이 없다는 메세지를 표시합니다.

        System.out.println("수정된 내역이 없습니다.");

        }else { // cnt의 값이 DB로부터 처리 건수를 받으면 초기값이 아니므로 성공한 메세지를 표시합니다.

        System.out.println(cnt + "건 수정됨");

        }

 

}

}

 

 

1.2 회원 등록 기능 구현하기 (메소드 명 : updateData)

public int updateData(Board board) {

         // 수정하고자 하는 게시물 정보를 이용하여 데이터 베이스에 업데이트 합니다.

         // 문자열 sql 객체를 생성하여 사용할 update문을 작성합니다. 

         String sql = "update boards set writer = ?, password = ?, subject = ?,";

         sql += " content = ?, readhit = ?, regdate = ? where no = ?";

 

         int cnt = -99999; // 동일하게 에러 확인용 정수형 변수 cnt 값을 -99999로 초기값을 설정해줍니다.

 

         Connection conn = null; // DB 접속용 객체를 만듭니다.

         PreparedStatement pstmt = null; // SQL를 실행하기 위한 pstmt 개체를 만듭니다.

 

         try {

         conn = super.getConnection(); // 부모 클래스의 getConnection 메소드를 호출하여 DB 접속을 활성합니다.

         pstmt = conn.prepareStatement(sql); // 작성한 update문를 실행할 수 있게 pstmt 객체에 저장합니다.

 

          // 작성한 update문 안의 ?의 순서에 맞게 매개변수의 값을 이용하여 set 해줍니다.

         pstmt.setString(1, board.getWriter());

         pstmt.setString(2, board.getPassword());

         pstmt.setString(3, board.getSubject());

         pstmt.setString(4, board.getContent());

         pstmt.setInt(5, board.getReadhit());

         pstmt.setString(6, board.getRegdate());

         pstmt.setInt(7, board.getNo());

 

         cnt = pstmt.executeUpdate(); // executeUpdate 메소드를 호출하여 처리된 행 수의 정수값을 cnt에 저장합니다.

 

         conn.commit(); // update 문의 실행 결과를 DB에 확정합니다.

 

         // 아래는 실행의 오류나 예외 처리 상황이 발생할 때를 대비하여 try catch문으로 작성합니다.

         } catch (Exception e) {

         try {

         conn.rollback();

         } catch (SQLException e1) {

                  e1.printStackTrace();

         }

         e.printStackTrace();

         } finally {

         try {

         if(pstmt != null){pstmt.close(); }

         if(conn != null){conn.close(); }

         } catch (Exception e2) {

                  e2.printStackTrace();

         }

         }

 

         return cnt; // 정수형 변수인 cnt의 값을 호출했던 곳으로 반환합니다.

}

 

1.3 구현한 기능 확인하기