게시판 만들어 보기(특정 게시물 내용을 수정하기) - (5)
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 구현한 기능 확인하기