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 끝
}
댓글
댓글 쓰기