JAVA - DB 연동 게시판 만들기

이동주·2025년 4월 1일

JAVA

목록 보기
30/30

MVC

  • MVC : Model - View - Controller의 약자
  • 코드의 유지보수나 확장성에 유리함
package ch20.oracle.sec05.app.dto;

import java.util.Date;

import lombok.Builder;
import lombok.Data;

@Data
@Builder
public class Board {
	private int bno;
	private String btitle;
	private String bcontent;
	private String bwriter;
	private Date bdate;
}
package ch20.oracle.sec05.app;

import java.util.Scanner;

import ch20.oracle.sec05.app.dto.Board;
import ch20.oracle.sec05.app.service.BoardService;


public class BoardConnection {
	static Scanner scanner = new Scanner(System.in);
	static BoardService boardService = new BoardService();
	
	public static void main(String[] args) {
		while(true) {
			System.out.println("1.게시글목록 | 2.게시글작성 | 3.게시글조회 | 4.게시글수정 | 5.게시글삭제 | 6.종료");
			System.out.print("원하는 작업은 ?");
			String choice = scanner.nextLine();
			switch(choice) {
			case "1":
				list(); // 게시글 목록
				break;
			case "2":
				insert(); // 게시글 입력
				break;
			case "3":
				search(); // 게시글 조회
				break;
			case "4":
				update(); // 게시글 수정
				break;
			case "5":
				delete(); // 게시글 삭제
				break;
			case "6":
				boardService.close();
				System.out.println("프로그램 종료");
				System.exit(0);
				break;
			default:
				System.out.println("입력이 잘못되었습니다");
				break;
			}
		}
	}


	private static void update() {
		try {
			System.out.print("수정할 게시글 번호 : ");
			int bno = Integer.parseInt(scanner.nextLine());
			
			boolean found = false;
			
			for(Board board : boardService.list()) {
				if (board.getBno() == bno) {
					found = true;
					
					System.out.print("수정할 게시글 제목 : ");
					String title = scanner.nextLine();
					
					System.out.print("수정할 게시글 내용 : ");
					String content = scanner.nextLine();
					
					boardService.update(title, content, bno);
					
					break;
				}
			}
			if(!found) {
				System.out.println("해당 게시글이 존재하지 않습니다. ");
				return;
			}
		} catch (Exception e) {
			System.out.println("수치만 입력해주세요");
			return;
		}	
	}

	private static void delete() {
		System.out.print("삭제할 게시글 번호 : ");
		int bno = Integer.parseInt(scanner.nextLine());
		
		boardService.delete(bno);
	}

	private static void insert() {
		System.out.print("게시글 제목 : ");
		String title = scanner.nextLine();
		
		System.out.print("게시글 내용 : ");
		String content = scanner.nextLine();
		
		System.out.print("게시글 작성자 : ");
		String writer = scanner.nextLine();

		//객체생성 
		Board board = Board.builder()
				.btitle(title)
				.bcontent(content)
				.bwriter(writer)
				.build();

		//등록
		boardService.insert(board);
	}
	
	private static void search() {
		//입력값 검증
		try {
			System.out.print("검색할 게시글 번호 : ");
			int bno = Integer.parseInt(scanner.nextLine());
			
			boolean found = false;
			
			for(Board board : boardService.list()) {
				if (board.getBno() == bno) {
					found = true;
					break;
				}
			}
			
			if(!found) {
				System.out.println("해당 게시글이 존재하지 않습니다. ");
				return;
			}
			
			Board board = boardService.detailList(bno);
			
			System.out.println(board.getBno() + " : " + board.getBtitle() + " : " + 
					board.getBcontent() + " : " + board.getBwriter() + " : " + board.getBdate());
			
		} catch (Exception e) {
			System.out.println("수치만 입력해주세요");
			return;
		}
	
	}

	private static void list() {
		for(var board : boardService.list()) {
			System.out.println(board.getBno() + " : " + board.getBtitle() + " : " + 
					board.getBcontent() + " : " + board.getBwriter() + " : " + board.getBdate());
		}
	}
}		
package ch20.oracle.sec05.app.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import ch20.oracle.sec05.app.dto.Board;

public class BoardDAO {
	Connection conn = null;
	
	// 생성자 (등록)
	public BoardDAO() {
		try {
			//JDBC Driver 등록
			Class.forName("oracle.jdbc.OracleDriver");

			//연결하기
			conn = DriverManager.getConnection(
					"jdbc:oracle:thin:@localhost:1521/XE",
					"scott",
					"1004"
					);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	//close
	public void close() {
		if(conn != null) {
			try {
				//연결 끊기
				conn.close();
			} catch (SQLException e) {}
		}
	}	
	
	//목록
	public List<Board> list() {
		List<Board> list = new ArrayList<>();
		try {
			//SQL 구문 객체 생성한다 
			PreparedStatement stmt = conn.prepareStatement("SELECT * FROM Boards");

			//select 구문을 실행한다 
			ResultSet rs = stmt.executeQuery();
			while(rs.next()) {
				//객체 생성 하여 배열에 추가한다
				list.add(Board.builder()
						.bno(rs.getInt("bno"))
						.btitle(rs.getString("btitle"))
						.bcontent(rs.getString("bcontent"))
						.bwriter(rs.getString("bwriter"))
						.bdate(rs.getDate("bdate"))
						.build()
						);
			}
			rs.close();
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}	
		
		return list;
	}	

	//상세보기
	public Board detailList(int bno) {
		Board result = null;
		try {
			PreparedStatement selectStmt = conn.prepareStatement(
					"SELECT * FROM boards WHERE bno=?");
			selectStmt.setInt(1, bno);
			ResultSet rs = selectStmt.executeQuery();
			if (rs.next()) {
				result = Board.builder()
					.bno(rs.getInt("bno"))
					.btitle(rs.getString("btitle"))
					.bcontent(rs.getString("bcontent"))
					.bwriter(rs.getString("bwriter"))
					.bdate(rs.getDate("bdate"))
					.build();
			}
			selectStmt.close();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return result;
	}
	
	//등록
	public Board insert(Board board) {
		try {
			//SQL 구문 객체 생성한다
			PreparedStatement insertStmt = conn.prepareStatement(
				"insert into boards (bno, btitle, bcontent, bwriter, bdate) "
				+ "values(seq_bno.nextval, ?, ?, ?, sysdate)");
			
			//인자값 설정 
			insertStmt.setString(1, board.getBtitle());
			insertStmt.setString(2, board.getBcontent());
			insertStmt.setString(3, board.getBwriter());

			//SQL 구문 실행 
			insertStmt.executeUpdate();

			insertStmt.close();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return board;
	}	
	//수정
	public void update(Board board) {
		try {
			//SQL 구문 객체 생성한다
			PreparedStatement updateStmt = conn.prepareStatement(
					"UPDATE boards "
					+ "SET btitle = ?, "
					+ "bcontent = ? "
					+ "WHERE bno= ?");
			
			//인자값 설정
			updateStmt.setString(1, board.getBtitle());
			updateStmt.setString(2, board.getBcontent());
			updateStmt.setInt(3, board.getBno());
			
			updateStmt.executeUpdate();

			updateStmt.close();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}	
	
	//삭제
	public void delete(int bno) {
		try {
			//SQL 구문 객체 생성한다
			PreparedStatement deleteStmt = conn.prepareStatement(
					"delete from boards WHERE bno= ?");
			
			//인자값 설정
			deleteStmt.setInt(1, bno);
			
			deleteStmt.executeUpdate();

			deleteStmt.close();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}	
}
package ch20.oracle.sec05.app.service;

import java.util.List;

import ch20.oracle.sec05.app.dao.BoardDAO;
import ch20.oracle.sec05.app.dto.Board;

public class BoardService {
private BoardDAO dao = new BoardDAO();
	
	public List<Board> list() {
		return dao.list();
	}
	
	public Board detailList(int bno) {
		return dao.detailList(bno);
	}
		
	public Board insert(Board board) {
		return dao.insert(board);
	}
	
	public void update(String btitle, String bcontent, int bno) { 
		dao.update(Board.builder().bno(bno).btitle(btitle)
				.bcontent(bcontent).build());
	}

	
	public void delete(int bno) {
		dao.delete(bno);
	}
	
	public void close() {
		dao.close();
	}
}
profile
끄작끄작

0개의 댓글