2020.11.13 고급자바 과제 내코드

package kr.or.ddit.basic;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

import kr.or.ddit.util.DBUtil;
import kr.or.ddit.util.DBUtil2;
import kr.or.ddit.util.DBUtil3;

public class JdbcHomework20201113 {
private Scanner scan = new Scanner(System.in);

public static void main(String[] args) {

// 기본생성자 인스턴스화, start() 부른듯..
new JdbcHomework20201113().Start();

}

// displayMenu 를 따로 만들어서 돌아올 수 있도록 .

public void Start() {
Connection conn = null;
// 그냥 statement 로 하지 않고 preparedStatement 로 만들 것임
PreparedStatement pstmt = null;
ResultSet rs = null;
Statement stmt = null;

while (true) {

// 변수 선언을 해줬으니까 그것으로 try catch 문을 이용해서 연결 할거다.

// DBUtil 안에서 드라이버 로딩 ( forname ) 이랑 connection 연결 했다 (
// DriverManager.getConnection )

try {
conn = DBUtil.getConnection();

String sql = "select * from jdbc_board_test ";

// 객체 생성
stmt = conn.createStatement();

// sql 문장을 실행해서 결과값을 rs 에 넣는다.
rs = stmt.executeQuery(sql);

// rs.next() 가 true 일때는 읽어올 데이터 값이 있다는 것
while (rs.next()) {
int board_no = rs.getInt(1);
String board_title = rs.getString(2);
String board_writer = rs.getString(3);
Date board_date = rs.getDate(4);
int board_cnt = rs.getInt(5);
String board_content = rs.getString(6);

System.out.println("------------------------------------------------------");
System.out.println("전체 게시판 목록");
System.out.println("------------------------------------------------------");

System.out.println("게시글번호 \t 제목 \t\t 작성자 \t\t 작성일자 \t\t 조회수 \t\t 내용");
System.out.println(board_no + "\t" + board_title + "\t" + board_writer + "\t" + board_date + "\t"
+ board_cnt + "\t" + board_content);

} // while 끝

System.out.println("---------------------------------------------");

} catch (Exception e) {
// TODO: handle exception
}

int choice = displayMenu();
switch (choice) {

// 새글작성
case 1:
newWrite();
break;

// 게시글보기
case 2:
viewOne();
break;
// 검색
case 3:
search();
break;
case 0:
System.out.println("프로그램이 종료 되었습니다.");
System.out.println("-------------------");

}

}
}

private int displayMenu() {
// 전체 게시판 목록 조회

// 검색 번호 입력
System.out.println();
System.out.print(" -- 작업 선택 -- ");
System.out.print("1. 새글 작성");
System.out.print("2. 게시글 보기");
System.out.print("3. 검색");
System.out.println("0. 작업 끝");
System.out.println("-----------------");
System.out.println("원하는 작업 번호를 입력하세요");
// 위에 Scanner scan = new Scanner(System.in) 해 놓은걸 사용하면 된다.

return scan.nextInt();

} // displayMenu() 끝

// 새글 작성하기
private void newWrite() {
int k = 0;
Connection conn = null;
// 그냥 statement 로 하지 않고 preparedStatement 로 만들 것임
PreparedStatement pstmt = null;
ResultSet rs = null;
Scanner sc = new Scanner(System.in);
// 현재날짜 등록하려고 ( 게시판에 )

// 새 글 입력할 각각 컬럼당 데이터를 인자 받아오기
System.out.println("새 게시글 등록하기");

System.out.println("작성자 이름을 입력해주세요");
String board_writer = sc.nextLine();

System.out.println("게시글의 제목을 입력하세요");
String board_title = sc.nextLine();

System.out.println("게시글의 내용을 입력해주세요");
String board_content = sc.nextLine();
String seq = "JDBC_BOARD_TEST_SEQ.nextVal";

String sql = "INSERT INTO jdbc_board_test ( board_no, board_title , board_writer , board_date ,  board_cnt , board_content) "
+ "values ( JDBC_BOARD_TEST_SEQ.nextVal , ? , ? , SYSDATE , 0 , ?   ) ";

try {
conn = DBUtil.getConnection();
pstmt = conn.prepareStatement(sql);

// 제목 등록

pstmt.setString(1, board_title);
// 작성자 등록
pstmt.setString(2, board_writer);
// 내용 등록
pstmt.setString(3, board_content);

int cnt = pstmt.executeUpdate();

if (cnt > 0) {
System.out.println("회원 정보 추가 성공 !!");
} else {
System.out.println("추가 작업 실패 ~~~");
}

} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (pstmt != null)
try {
pstmt.close();
} catch (SQLException e) {
}
if (conn != null)
try {
conn.close();
} catch (SQLException e) {
}
} // finally 끝

}

// 게시글보기

private void viewOne() {

int cnt = 0;
int board_cnt_for = 0;
Connection conn = null;
// 그냥 statement 로 하지 않고 preparedStatement 로 만들 것임
PreparedStatement pstmt = null;
PreparedStatement pstmt2 = null;
ResultSet rs = null;

Scanner sc = new Scanner(System.in);
System.out.println("보기 원하는 게시글의 번호를 입력해 주세요");
int board_no = sc.nextInt();

// board_cnt 를 구한다.
// borad_cnt 에서 + 1 을한다.
// 그다음 조회를 한다.

// borad_cnt 를 구한다.

conn = DBUtil.getConnection();

try {

String sql1 = "SELECT NVL(board_cnt, 0 ) AS board_cnt FROM  jdbc_board_test WHERE board_no = ?  ";
pstmt = conn.prepareStatement(sql1);

pstmt.setInt(1, board_no);
rs = pstmt.executeQuery();

if (rs.next()) {

board_cnt_for = rs.getInt("board_cnt");

}
board_cnt_for = board_cnt_for + 1;

// board_cnt 에 + 1을 해준다
String sql2 = "UPDATE jdbc_board_test SET board_cnt = ? where board_no = ?  ";
pstmt = conn.prepareStatement(sql2);

pstmt.setInt(1, board_cnt_for);
pstmt.setInt(2, board_no);

// 업데이트 표시 . (확인용)
int c = pstmt.executeUpdate();

} catch (Exception e) {
// TODO: handle exception
}

// board_no이 입력한 board_no 인 애를 조회 해준다.

try {

String sql = "SELECT  board_no , board_title, board_writer, board_date, board_cnt,  board_content    FROM  jdbc_board_test WHERE board_no = ?  ";

pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, board_no);

rs = pstmt.executeQuery();

while (rs.next()) {
System.out.println(" 제목 \t 작성자 \t 작성일 \t 조회수");

String board_title = rs.getString("board_title");
String board_writer = rs.getString("board_writer");
Date board_date = rs.getDate("board_date");
int board_cnt = rs.getInt("board_cnt");
String board_content = rs.getString("board_content");

System.out.println(" 게시글 제목 : " + board_title);
System.out.println("게시글 작성자 : " + board_writer);
System.out.println("게시글 작성 날짜 " + board_date);
System.out.println(" 게시글 조회수" + board_cnt);
System.out.println("게시글 내용" + board_content);
System.out.println("--------------------------------------------------------");

}

} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

// 수정 삭제 메소드 만들기

System.out.println("원하는 번호를 입력해 주세요");
System.out.println("1. 수정 2. 삭제 3. 리스트가기");
int num = sc.nextInt();

switch (num) {
case 1:
update();
break;
case 2:
delete(board_no);
break;
case 3:
Start();
break;

}

}

private void update() {
System.out.println();

}

private void delete(int board_no) {

Connection conn = null;
PreparedStatement pstmt = null;

try {

conn = DBUtil.getConnection();

String sql = "delete from jdbc_board_test where board_no = ?  ";

pstmt.setInt(1, board_no);

int cnt = pstmt.executeUpdate();

if (cnt > 0) {
System.out.println("게시글 삭제 성공~~~");
} else {
System.out.println("게시글 삭제 실패!!!");
}

} catch (Exception e) {
// TODO: handle exception
}

}

// 제목으로 검색한다. 입력값이 없으면 전체가 출력
private void search() {
Connection conn = null;
ResultSet rs = null;
Statement stmt = null;

System.out.println();
System.out.println("--------------------");
System.out.println("검색하고 싶은 제목을 입력하세요");
Scanner sc = new Scanner(System.in);
String title = sc.nextLine();

try {
conn = DBUtil2.getConnection();
String sql = "select * from jdbc_board_test where board_title Like '%" + title + "%'";
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);

while (rs.next()) {

String board_title = rs.getString("board_title");
String board_writer = rs.getString("board_writer");
String board_date = rs.getDate("board_date").toString();
int board_cnt = rs.getInt("board_cnt");
String board_content = rs.getString("board_content");

System.out.println(" 게시글 제목 : " + board_title);
System.out.println("게시글 작성자 : " + board_writer);
System.out.println("게시글 작성 날짜 " + board_date);
System.out.println(" 게시글 조회수" + board_cnt);
System.out.println("게시글 내용" + board_content);
}

} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (rs != null)
try {
rs.close();
} catch (SQLException e) {
}
if (stmt != null)
try {
stmt.close();
} catch (SQLException e) {
}
if (conn != null)
try {
conn.close();
} catch (SQLException e) {
}
}

}

// start 끝

}

댓글