IJdbcBoardDao
package kr.or.ddit.board.dao;
import java.util.List;
import kr.or.ddit.board.vo.JdbcBoardVO;
public interface IJdbcBoardDao {
/**
* JdbcBoardVO에 담겨진 자료를 DB에 insert하는 메서드
*
* @param boardVo DB에 insert할 자료가 저장된 JdbcBoardVO객체
* @return 작업성공 : 1, 작업실패 : 0
*/
public int insertBoard(JdbcBoardVO boardVo);
/**
* 게시글 번호를 인수값으로 받아서 해당 게시글을 삭제하는 메서드
*
* @param boardNo 삭제할 게시글 번호
* @return 작업성공 : 1, 작업실패 : 0
*/
public int deleteBoard(int boardNo);
/**
* 하나의 JdbcBoardVO자료를 이용하여 DB에 update하는 메서드
*
* @param boardVo update할 게시글 정보가 저장된 JdbcBoardVO객체
* @return 작업성공 : 1, 작업실패 : 0
*/
public int updateBoard(JdbcBoardVO boardVo);
/**
* DB에서 전체 게시글 목록을 가져오는 메서드
* @return JdbcBoardVO객체를 담고 있는 List객체
*/
public List<JdbcBoardVO> getAllBoardList();
/**
* 게시글 번호를 인수값으로 받아서 해당 게시글 정보를 가져오는 메서드
*
* @param boardNo 가져올 게시글의 게시글 번호
* @return 게시글 번호에 맞는 자료가 있으면 해당 게시글 정보를
* 담고 있는 JdbcBoardVO객체, 자료가 없으면 null 반환
*/
public JdbcBoardVO getBoard(int boardNo);
/**
* 게시글의 제목을 인수값으로 받아서 게시글을 검색하는 메서드
*
* @param title 검색할 게시글의 제목
* @return 검색한 결과가 저장된 List객체
*/
public List<JdbcBoardVO> getSearchBoardList(String title);
/**
* 게시글 번호를 인수값으로 받아서 해당 게시글의 조회수를 증가시키는 메서드
*
* @param boardNo 조회수를 증가할 게시글 번호
* @return 작업성공 : 1, 작업실패 : 0
*/
public int setCountIncrement(int boardNo);
}
JdbcBoardDaoImpl
package kr.or.ddit.board.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import kr.or.ddit.board.vo.JdbcBoardVO;
import kr.or.ddit.util.DBUtil3;
public class JdbcBoardDaoImpl implements IJdbcBoardDao{
private static JdbcBoardDaoImpl dao;
private JdbcBoardDaoImpl(){ }
public static JdbcBoardDaoImpl getInstance(){
if(dao==null) dao = new JdbcBoardDaoImpl();
return dao;
}
private Connection conn;
private PreparedStatement pstmt;
private Statement stmt;
private ResultSet rs;
// 사용한 자원을 반납하는 메서드
private void disConnect(){
if(rs!=null) try{ rs.close(); }catch(SQLException e){}
if(stmt!=null) try{ stmt.close(); }catch(SQLException e){}
if(pstmt!=null) try{ pstmt.close(); }catch(SQLException e){}
if(conn!=null) try{ conn.close(); }catch(SQLException e){}
}
@Override
public int insertBoard(JdbcBoardVO boardVo) {
int cnt = 0;
try {
conn = DBUtil3.getConnection();
String sql = "insert into jdbc_board "
+ "(board_no, board_title, board_writer,"
+ " board_date, board_cnt, board_content) "
+ " values(board_seq.nextval, ?, ? , sysdate, 0, ? ) ";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, boardVo.getBoard_title());
pstmt.setString(2, boardVo.getBoard_writer());
pstmt.setString(3, boardVo.getBoard_content());
cnt = pstmt.executeUpdate();
} catch (SQLException e) {
cnt = 0;
e.printStackTrace();
} finally{
disConnect();
}
return cnt;
}
@Override
public int deleteBoard(int boardNo) {
int cnt = 0;
try {
conn = DBUtil3.getConnection();
String sql = "delete from jdbc_board where board_no = ? ";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, boardNo);
cnt = pstmt.executeUpdate();
} catch (SQLException e) {
cnt = 0;
e.printStackTrace();
} finally{
disConnect();
}
return cnt;
}
@Override
public int updateBoard(JdbcBoardVO boardVo) {
int cnt = 0;
try {
conn = DBUtil3.getConnection();
String sql = "update jdbc_board set "
+ " board_title = ? ,"
+ " board_content = ? ,"
+ " board_date = sysdate "
+ " where board_no = ? ";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, boardVo.getBoard_title());
pstmt.setString(2, boardVo.getBoard_content());
pstmt.setInt(3, boardVo.getBoard_no());
cnt = pstmt.executeUpdate();
} catch (SQLException e) {
cnt = 0;
e.printStackTrace();
} finally {
disConnect();
}
return cnt;
}
@Override
public List<JdbcBoardVO> getAllBoardList() {
List<JdbcBoardVO> boardList = null;
try {
conn = DBUtil3.getConnection();
String sql = "select board_no, board_title, board_writer,"
+ " to_char(board_date, 'YYYY-MM-DD') board_date , board_cnt, board_content "
+ " from jdbc_board "
+ " order by board_no desc";
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
boardList = new ArrayList<>();
while(rs.next()){
JdbcBoardVO boardVo = new JdbcBoardVO();
boardVo.setBoard_no(rs.getInt("board_no"));
boardVo.setBoard_title(rs.getString("board_title"));
boardVo.setBoard_writer(rs.getString("board_writer"));
boardVo.setBoard_date(rs.getString("board_date"));
boardVo.setBoard_cnt(rs.getInt("board_cnt"));
boardVo.setBoard_content(rs.getString("board_content"));
boardList.add(boardVo);
}
} catch (SQLException e) {
boardList = null;
e.printStackTrace();
} finally {
disConnect();
}
return boardList;
}
@Override
public JdbcBoardVO getBoard(int boardNo) {
JdbcBoardVO boardVo = null;
try {
conn = DBUtil3.getConnection();
String sql = "select board_no, board_title, board_writer,"
+ " to_char(board_date, 'YYYY-MM-DD') board_date , board_cnt, board_content "
+ " from jdbc_board "
+ " where board_no = ? ";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, boardNo);
rs = pstmt.executeQuery();
if(rs.next()){
boardVo = new JdbcBoardVO();
boardVo.setBoard_no(rs.getInt("board_no"));
boardVo.setBoard_title(rs.getString("board_title"));
boardVo.setBoard_writer(rs.getString("board_writer"));
boardVo.setBoard_date(rs.getString("board_date"));
boardVo.setBoard_cnt(rs.getInt("board_cnt"));
boardVo.setBoard_content(rs.getString("board_content"));
}
} catch (SQLException e) {
boardVo = null;
e.printStackTrace();
} finally{
disConnect();
}
return boardVo;
}
@Override
public List<JdbcBoardVO> getSearchBoardList(String title) {
List<JdbcBoardVO> boardList = null;
try {
conn = DBUtil3.getConnection();
String sql = "select board_no, board_title, board_writer,"
+ " to_char(board_date, 'YYYY-MM-DD') board_date , board_cnt, board_content "
+ " from jdbc_board "
+ " where board_title like '%' || ? || '%'"
+ " order by board_no desc";
// where board_title like '%' || ? || '%'
// where board_title like '%' || '가' || '%'
// where board_title like '%?%' ==> 사용 불가
// where board_title like '%'가'%'
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, title);
rs = pstmt.executeQuery();
boardList = new ArrayList<>();
while(rs.next()){
JdbcBoardVO boardVo = new JdbcBoardVO();
boardVo.setBoard_no(rs.getInt("board_no"));
boardVo.setBoard_title(rs.getString("board_title"));
boardVo.setBoard_writer(rs.getString("board_writer"));
boardVo.setBoard_date(rs.getString("board_date"));
boardVo.setBoard_cnt(rs.getInt("board_cnt"));
boardVo.setBoard_content(rs.getString("board_content"));
boardList.add(boardVo);
}
} catch (SQLException e) {
boardList = null;
e.printStackTrace();
} finally {
disConnect();
}
return boardList;
}
@Override
public int setCountIncrement(int boardNo) {
int cnt = 0;
try {
conn = DBUtil3.getConnection();
String sql = "update jdbc_board "
+ " set board_cnt = board_cnt + 1 "
+ " where board_no = ? ";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, boardNo);
cnt = pstmt.executeUpdate();
} catch (SQLException e) {
cnt = 0;
e.printStackTrace();
} finally {
disConnect();
}
return cnt;
}
}
IJdbcBoardService
package kr.or.ddit.board.service;
import java.util.List;
import kr.or.ddit.board.vo.JdbcBoardVO;
public interface IJdbcBoardService {
/**
* JdbcBoardVO에 담겨진 자료를 DB에 insert하는 메서드
*
* @param boardVo DB에 insert할 자료가 저장된 JdbcBoardVO객체
* @return 작업성공 : 1, 작업실패 : 0
*/
public int insertBoard(JdbcBoardVO boardVo);
/**
* 게시글 번호를 인수값으로 받아서 해당 게시글을 삭제하는 메서드
*
* @param boardNo 삭제할 게시글 번호
* @return 작업성공 : 1, 작업실패 : 0
*/
public int deleteBoard(int boardNo);
/**
* 하나의 JdbcBoardVO자료를 이용하여 DB에 update하는 메서드
*
* @param boardVo update할 게시글 정보가 저장된 JdbcBoardVO객체
* @return 작업성공 : 1, 작업실패 : 0
*/
public int updateBoard(JdbcBoardVO boardVo);
/**
* DB에서 전체 게시글 목록을 가져오는 메서드
* @return JdbcBoardVO객체를 담고 있는 List객체
*/
public List<JdbcBoardVO> getAllBoardList();
/**
* 게시글 번호를 인수값으로 받아서 해당 게시글 정보를 가져오는 메서드
*
* @param boardNo 가져올 게시글의 게시글 번호
* @return 게시글 번호에 맞는 자료가 있으면 해당 게시글 정보를
* 담고 있는 JdbcBoardVO객체, 자료가 없으면 null 반환
*/
public JdbcBoardVO getBoard(int boardNo);
/**
* 게시글의 제목을 인수값으로 받아서 게시글을 검색하는 메서드
*
* @param title 검색할 게시글의 제목
* @return 검색한 결과가 저장된 List객체
*/
public List<JdbcBoardVO> getSearchBoardList(String title);
/**
* 게시글 번호를 인수값으로 받아서 해당 게시글의 조회수를 증가시키는 메서드
*
* @param boardNo 조회수를 증가할 게시글 번호
* @return 작업성공 : 1, 작업실패 : 0
*/
// public int setCountIncrement(int boardNo);
}
JdbcBoardServiceImple
package kr.or.ddit.board.service;
import java.util.List;
import kr.or.ddit.board.dao.IJdbcBoardDao;
import kr.or.ddit.board.dao.JdbcBoardDaoImpl;
import kr.or.ddit.board.vo.JdbcBoardVO;
public class JdbcBoardServiceImple implements IJdbcBoardService {
private IJdbcBoardDao dao;
private static JdbcBoardServiceImple service;
private JdbcBoardServiceImple(){
dao = JdbcBoardDaoImpl.getInstance();
}
public static JdbcBoardServiceImple getInstance(){
if(service==null) service = new JdbcBoardServiceImple();
return service;
}
@Override
public int insertBoard(JdbcBoardVO boardVo) {
return dao.insertBoard(boardVo);
}
@Override
public int deleteBoard(int boardNo) {
return dao.deleteBoard(boardNo);
}
@Override
public int updateBoard(JdbcBoardVO boardVo) {
return dao.updateBoard(boardVo);
}
@Override
public List<JdbcBoardVO> getAllBoardList() {
return dao.getAllBoardList();
}
@Override
public JdbcBoardVO getBoard(int boardNo) {
int cnt = dao.setCountIncrement(boardNo); // 조회수 증가하기
if(cnt==0){ // 조회수 증가하기 실패
return null;
}
return dao.getBoard(boardNo);
}
@Override
public List<JdbcBoardVO> getSearchBoardList(String title) {
return dao.getSearchBoardList(title);
}
// @Override
// public int setCountIncrement(int boardNo) {
// return dao.setCountIncrement(boardNo);
// }
}
JdbcBoardVO
package kr.or.ddit.board.vo;
public class JdbcBoardVO {
private int board_no;
private String board_title;
private String board_writer;
private String board_date;
private int board_cnt;
private String board_content;
public int getBoard_no() {
return board_no;
}
public void setBoard_no(int board_no) {
this.board_no = board_no;
}
public String getBoard_title() {
return board_title;
}
public void setBoard_title(String board_title) {
this.board_title = board_title;
}
public String getBoard_writer() {
return board_writer;
}
public void setBoard_writer(String board_writer) {
this.board_writer = board_writer;
}
public String getBoard_date() {
return board_date;
}
public void setBoard_date(String board_date) {
this.board_date = board_date;
}
public int getBoard_cnt() {
return board_cnt;
}
public void setBoard_cnt(int board_cnt) {
this.board_cnt = board_cnt;
}
public String getBoard_content() {
return board_content;
}
public void setBoard_content(String board_content) {
this.board_content = board_content;
}
}
JdbcBoardController
package kr.or.ddit.board.controller;
import java.util.List;
import java.util.Scanner;
import kr.or.ddit.board.service.IJdbcBoardService;
import kr.or.ddit.board.service.JdbcBoardServiceImple;
import kr.or.ddit.board.vo.JdbcBoardVO;
public class JdbcBoardController {
private IJdbcBoardService service;
private Scanner scan;
public JdbcBoardController() {
service = JdbcBoardServiceImple.getInstance();
scan = new Scanner(System.in);
}
public static void main(String[] args) {
new JdbcBoardController().boardStart();
}
public void boardStart(){
String title = null;
while(true){
int choice = displayMenu(title);
title = null;
switch(choice){
case 1 : // 새글 작성
insertBoard(); break;
case 2 : // 게시글 보기
viewBoard(); break;
case 3 : // 검색
title = searchBoard(); break;
case 0 : // 작업 끝...
System.out.println();
System.out.println("게시판 프로그램을 종료합니다.");
return;
default :
System.out.println("작업 번호를 잘못 입력했습니다. 다시 입력하세요.");
}
}
}
// 게시글의 검색 작업 ==> 검색할 단어를 입력 받아서 반환하는 메서드
private String searchBoard(){
scan.nextLine(); // 입력 버퍼 비우기
System.out.println();
System.out.println("검색 작업");
System.out.println("--------------------------------------------");
System.out.print("- 검색할 제목 입력 : ");
String title = scan.nextLine();
return title;
}
// 게시글의 내용을 보여주는 메서드
private void viewBoard(){
System.out.println();
System.out.print("보기를 원하는 게시물 번호 입력 >> ");
int boardNo = scan.nextInt();
JdbcBoardVO boardVo = service.getBoard(boardNo);
if(boardVo == null){
System.out.println(boardNo + "번의 게시글이 존재하지 않습니다.");
return;
}
int num;
do{
System.out.println();
System.out.println("------------------------------------------------------------");
System.out.println("- 제 목 : " + boardVo.getBoard_title());
System.out.println("- 작성자 : " + boardVo.getBoard_writer());
System.out.println("- 내 용 : " + boardVo.getBoard_content());
System.out.println("- 작성일 : " + boardVo.getBoard_date());
System.out.println("- 조회수 : " + boardVo.getBoard_cnt());
System.out.println("-------------------------------------------------------------");
System.out.println("메뉴 : 1. 수정 2. 삭제 3. 리스트로 가기");
System.out.print("작업선택 >> ");
num = scan.nextInt();
switch(num){
case 1 : // 수정
updateBoard(boardNo); break;
case 2 : // 삭제
deleteBoard(boardNo); break;
case 3 : // 리스트로 가기
return;
default :
System.out.println("작업 번호는 1번~3번 사이만 입력하세요.");
System.out.println("다시 입력하세요.");
}
}while(num<1 || num>3);
}
// 게시글을 삭제하는 메서드
private void deleteBoard(int boardNo){
int cnt = service.deleteBoard(boardNo);
if(cnt>0){
System.out.println(boardNo + "번글이 삭제되었습니다.");
}else{
System.out.println(boardNo + "번글 삭제 작업 실패!!!");
}
}
// 게시글의 제목과 내용을 수정하는 메서드
private void updateBoard(int boardNo){
scan.nextLine(); // 입력 버퍼 비우기
System.out.println();
System.out.println("수정 작업하기");
System.out.println("-----------------------------------");
System.out.print("- 제 목 : ");
String title = scan.nextLine();
System.out.print("- 내 용 : ");
String content = scan.nextLine();
JdbcBoardVO boardVo = new JdbcBoardVO();
boardVo.setBoard_no(boardNo);
boardVo.setBoard_title(title);
boardVo.setBoard_content(content);
int cnt = service.updateBoard(boardVo);
if(cnt>0){
System.out.println(boardNo + "번글이 수정되었습니다. ");
}else{
System.out.println(boardNo + "번글 수정 작업 실패!!!");
}
}
// 새글을 작성하는 메서드
private void insertBoard(){
scan.nextLine(); // 입력 버퍼 비우기
System.out.println();
System.out.println("새글 작성하기");
System.out.println("--------------------------------------------");
System.out.print("- 제 목 : ");
String title = scan.nextLine();
System.out.print("- 작 성 자 : ");
String writer = scan.nextLine();
System.out.print("- 내 용 : ");
String content = scan.nextLine();
JdbcBoardVO boardVo = new JdbcBoardVO();
boardVo.setBoard_title(title);
boardVo.setBoard_writer(writer);
boardVo.setBoard_content(content);
int cnt = service.insertBoard(boardVo);
if(cnt>0){
System.out.println("새글이 추가되었습니다...");
}else{
System.out.println("새글 추가 실패!!!");
}
}
// 게시판 목록을 보여주고 메뉴를 나타내며
// 사용자가 입력한 작업번호를 반환하는 메서드
private int displayMenu(String title){
List<JdbcBoardVO> boardList = null;
if(title==null){
boardList = service.getAllBoardList();
}else{
boardList = service.getSearchBoardList(title);
}
System.out.println();
System.out.println("-------------------------------------------------------------");
System.out.println(" No 제 목 작성자 조회수");
System.out.println("-------------------------------------------------------------");
if(boardList==null || boardList.size()==0){
System.out.println(" 출력할 게시글이 하나도 없습니다...");
}else{
for(JdbcBoardVO boardVo : boardList){
System.out.println(
boardVo.getBoard_no() + "\t" +
boardVo.getBoard_title() + "\t" +
boardVo.getBoard_writer() + "\t" +
boardVo.getBoard_cnt()
);
}
}
System.out.println("-------------------------------------------------------------");
System.out.println("메뉴 : 1. 새글작성 2. 게시글보기 3. 검색 0. 작업끝");
System.out.print("작업 선택 >> ");
int num = scan.nextInt();
return num;
}
}