DB - JAVA로 게시판 만드는 퀴즈(2) - Insert(게시물 등록하기) '편'(2022-08-10)

2022. 8. 10. 19:523층 1구역 - 개발의 장/Oracle DataBase

1. 서론

 

 

2.본론

 

Main.java

package jdbc7_answer;

import java.util.Scanner;

public class Main {
	private	static Scanner in = new Scanner(System.in);
	private static BoardServiceImpl boardService = new BoardServiceImpl();
	
	public static void main(String[] args) {
		while (true) {
			System.out.println();
			System.out.println("1. 게시글 등록");
			System.out.println("2. 게시글 번호 검색");
			System.out.println("3. 게시글 제목 검색");
			System.out.println("4. 게시글 모두 보기");
			System.out.println("5. 게시글 삭제");
			System.out.println("6. 게시글 수정");
			System.out.println("7. 프로그램 종료");
			System.out.print("선택 > ");
			int select;
			try {
				select = Integer.parseInt(in.next());
			} catch (Exception e) {
				continue;
			}
			switch (select) {
			case 1:	insert(); break;
			case 2:	selectNum(); break;
			case 3:	selectSubject(); break;
			case 4:	selectAll(); break;
			case 5:	delete(); break;
			case 6: update(); break;
			case 7: disconnection();
					System.out.println("프로그램을 종료합니다.");
					System.exit(0);
			default:
				System.out.println("메뉴 확인 후 다시 입력하세요.");
			}
		}
	}
	
	private static void insert() {
		in.nextLine();
		System.out.print("게시글 제목 : "); String subject = in.nextLine();
		System.out.print("게시글 내용 : "); String content = in.nextLine();
		System.out.print("게시글 작성자 : "); String writer = in.next();
		
		BoardDTO board = new BoardDTO();
		board.setSubject(subject);
		board.setContent(content);
		board.setWriter(writer);
		boardService.insert(board);
	}

 

 

BoardService.java

 

package jdbc7_answer;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

public class BoardServiceImpl implements IBoardService{
	private BoardDAOImpl boardDao = new BoardDAOImpl();
	
	@Override
	public void insert(BoardDTO board) {
		
		board.setNum(boardDao.selectMaxNum());
		
		Date date = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		board.setWriteTime(sdf.format(date));
		board.setHit(0);
		
		boardDao.insert(board);
	}
    }

 

BoardDTO.java

 

package jdbc7_answer;
/*
SQL> CREATE TABLE jdbc_concept7(
  2  num number,
  3  subject varchar2(20),
  4  content varchar2(20),
  5  writer varchar2(20),
  6  write_time varchar2(10),
  7  hit number
  8  );

SQL> commit;
 */
public class BoardDTO {
	private int num; // 게시글 번호
	private String subject; // 게시글 제목
	private String content; // 게시글 내용
	private String writer; // 게시글 작성자
	private String writeTime; // 게시글 작성일(연월일)
	private int hit; // 게시글 조회수
	
	//게시물 번호, 전체 검색할 때 데이터베이스에 있는 값을 가져와
	//여기에 임시저장한 후 BoardServiceImpl에서 출력함.
	public int getNum() {
		return num;
	}
	
	//검색할 때 데이터베이스에 있는 값을 가져와
	//여기에 임시저장한 후 BoardServiceImpl에서 출력함.
	public String getWriter() {
		return writer;
	}
	
	//게시물 제목, 전체 검색할 때 데이터베이스에 있는 값을 가져와
	//여기에 임시저장한 후 BoardServiceImpl에서 출력함.
	public String getSubject() {
		return subject;
	}
	//전체 검색할 때 데이터베이스에 있는 값을 가져와
	//여기에 임시저장한 후 BoardServiceImpl에서 출력함.
	public String getContent() {
		return content;
	}
	//전체 검색할 때 데이터베이스에 있는 값을 가져와
	//여기에 임시저장한 후 BoardServiceImpl에서 출력함.
	public String getWriteTime() {
		return writeTime;
	}
	
	//전체 검색할 때 데이터베이스에 있는 값을 가져와
	//여기에 임시저장한 후 BoardServiceImpl에서 출력함.
	public int getHit() {
		return hit;
	}
	
	//insert에서 받아와 여기에 임시저장
	public void setSubject(String subject) {
		this.subject = subject; 
	}
	
	//insert에서 받아와 여기에 임시저장
	public void setContent(String content) {
		this.content = content;
	}
	
	//insert에서 받아와 여기에 임시저장
	public void setWriter(String writer) {
		this.writer = writer;
	}
	
	//BoardDAO의 쿼리문에서 받아와 
	//BoardServiceImpl로 이동하고 여기에 임시저장
	public void setNum(int num) {
		this.num = num;
	}
	
	//Date를 나타내주는 java.util를 import를 하여
	//BoardServiceImpl에서 이동해 여기에 임시저장
	public void setWriteTime(String writeTime) {
		this.writeTime = writeTime;
	}
	
	//BoardDAO의 쿼리문에서 받아와 
	//BoardServiceImpl로 이동하고 여기에 임시저장
	public void setHit(int hit) {
		this.hit = hit;
	}
	
	
	
	
	
}

 

BoardDAOImpl.java

 

package jdbc7_answer;

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

public class BoardDAOImpl implements IBoardDAO {
	private Connection con;
	private PreparedStatement ps;
	private ResultSet rs;

	public BoardDAOImpl() {
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String username = "<권한받은 계정>";
		String password = "<설치시 등록한 비밀번호>";

		try {
			Class.forName("oracle.jdbc.OracleDriver");
			con = DriverManager.getConnection(url, username, password);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Override
	public int selectMaxNum() {
		String sql = "SELECT max(num) FROM <테이블 명>";
		int maxNum = 0;
		try {
			ps = con.prepareStatement(sql);
			rs = ps.executeQuery();
			if (rs.next()) {
				maxNum = rs.getInt(1);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return ++maxNum;
	}

	@Override
	public void insert(BoardDTO board) {
		String sql = "INSERT INTO <테이블 명> VALUES(?, ?, ?, ?, ?, ?)";

		try {
			ps = con.prepareStatement(sql);
			ps.setInt(1, board.getNum());
			ps.setString(2, board.getSubject());
			ps.setString(3, board.getContent());
			ps.setString(4, board.getWriter());
			ps.setString(5, board.getWriteTime());
			ps.setInt(6, board.getHit());

			ps.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
    }

 

3. 결론

 

은행의 통장발급 과정으로 생각해보자.

 

어떤 사람이 자신의 원대한 꿈을 이루고자 저축(게시물 작성)을 시작하려고 한다.

저축은 적금(게시물의 제목), 주택청약(게시물의 내용), 외화통장(닉네임) 총 3가지를 하고자 신청서(Insert값)를 제출하고

대기하면 그것을 검증(BoardService)하는 은행원이 신청서(Insert값)를 가져가 검증과 동시에

이 사람이 언제 저축을 시작했고(Date의 값)

몇 번째(board.setNum(boardDao.selectMaxNum());)로 저축을 시작한 사람이고,

저축한 횟수(board.setHit(0);)를 전산으로 저장하여 은행의 데이터베이스에 저장한다.