1. board 클래스 생성
import java.util.Date; import lombok.Data; @Data public class Board { private int bno; private String btitle; private String bcontent; private String bwriter; private Date bdate; }
오라클에 있는 변수들을 선언합니다.
여기서 lombok 어노테이션을 이용해서 getter, setter, toString() 메소드를 자동 생성시킵니다.
별도의 getter, setter를 생성할 필요 없습니다.
2. 클래스 및 메인 메서드 생성
public class BoardExample1 { public void list() { System.out.println(); System.out.println("[게시물 목록]"); System.out.println("------------------------------------------------------------"); System.out.printf("%-6s%-12s%-16s%-40s\n", "no", "writer", "date", "title"); System.out.println("------------------------------------------------------------"); System.out.printf("%-6s%-12s%-16s%-40s\n", "1", "winter", "2202.01.27", "게시판에 오신 것을 환영합니다."); System.out.printf("%-6s%-12s%-16s%-40s\n", "2", "winter", "2202.01.27", "올 겨울은 많이 춥습니다."); mainMenu(); } public void mainMenu() { System.out.println(); System.out.println("------------------------------------------------------------"); System.out.println("메인 메뉴 : 1.Create | 2.Read | 3.Clear | 4.Exit"); System.out.print("메뉴 선택: "); System.out.println(); } public static void main(String[] args) { BoardExample1 boardExample = new BoardExample1(); boardExample.list(); } }
BoardExample1 클래스 생성 및 main 메서드를 생성합니다.
main 메서드에는 boardExample 인스턴스를 생성하고 list를 불러옵니다.
그리고 list 메서드에는 mainMenu 메서드를 불러옵니다.
3. mainMenu 메서드
public void mainMenu() { System.out.println(); System.out.println("------------------------------------------------------------"); System.out.println("메인 메뉴 : 1.Create | 2.Read | 3.Clear | 4.Exit"); System.out.print("메뉴 선택: "); String menuNo = scanner.nextLine(); System.out.println(); switch(menuNo) { case "1" -> create(); case "2" -> read(); case "3" -> clear(); case "4" -> exit(); } }
mainMenu 메서드에는 번호를 입력하면 함수를 생성하게 만듭니다.
람다식('->') 는 java13부터 사용가능합니다.
4. list 메서드
public void list() { System.out.println(); System.out.println("[게시물 목록]"); System.out.println("------------------------------------------------------------"); System.out.printf("%-6s%-12s%-16s%-40s\n", "no", "writer", "date", "title"); System.out.println("------------------------------------------------------------"); // boards 테이블에서 게시물 정보를 가져와서 출력하기 try { String sql = "" + "SELECT bno, btitle, bcontent, bwriter, bdate " + "FROM boards " + "ORDER BY bno DESC"; PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery(); while(rs.next()) { Board board = new Board(); board.setBno(rs.getInt("bno")); board.setBtitle(rs.getString("btitle")); board.setBcontent(rs.getString("bcontent")); board.setBwriter(rs.getString("bwriter")); board.setBdate(rs.getDate("bdate")); System.out.printf("%-6s%-12s%-16s%-40s\n", board.getBno(), board.getBwriter(), board.getBdate(), board.getBtitle()); } rs.close(); pstmt.close(); } catch(SQLException e) { e.printStackTrace(); exit(); } mainMenu(); }
현재 어떤 게시물들이 있는지 목록으로 확인할 수 있습니다.
5. BoardExample1 생성자
private Scanner scanner = new Scanner(System.in); private Connection conn; public BoardExample4() { try { Class.forName("oracle.jdbc.OracleDriver"); conn = DriverManager.getConnection( "jdbc:oracle:thin:@연결 주소:포트/SID", "오라클 ID", "오라클 PW" ); } catch(Exception e) { e.printStackTrace(); exit(); } }
생성자를 실행하면 오라클과 연동할 수 있도록 만듭니다.
6. create 메서드
public void create() { // 입력 받기 Board board = new Board(); System.out.println("[새 게시물 입력]"); System.out.print("제목 : "); board.setBtitle(scanner.nextLine()); System.out.print("내용 : "); board.setBcontent(scanner.nextLine()); System.out.print("작성자 : "); board.setBwriter(scanner.nextLine()); // 보조 메뉴 출력 System.out.println("------------------------------------------------------------"); System.out.println("보조 메뉴 : 1.Ok | 2.Cancle"); System.out.print("메뉴 선택 : "); String menuNo = scanner.nextLine(); if(menuNo.equals("1")) { // boards 테이블에 게시물 정보 저장 try { String sql = "" + "INSERT INTO boards (bno, btitle, bcontent, bwriter, bdate) " + "VALUES (SEQ_BNO.NEXTVAL, ?, ?, ?, SYSDATE)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, board.getBtitle()); pstmt.setString(2, board.getBcontent()); pstmt.setString(3, board.getBwriter()); pstmt.executeUpdate(); pstmt.close(); } catch(Exception e) { e.printStackTrace(); exit(); } } list(); } // 입력 예시 // [새 게시물 입력] // 제목 : 봄이 왔어요. // 내용 : 봄이 오면 벚꽃이 피겠죠? // 작성자 : winter // ------------------------------------------------------------ // 보조 메뉴 : 1.Ok | 2.Cancle // 메뉴 선택 : 1
숫자 1을 입력하면 새로운 게시물을 생성할 수 있는 입력 칸이 만들어집니다.
글 작성 후 1번(Ok)을 입력하면 list에 바로 반영될 수 있도록 합니다.
7. read 메서드
public void read() { // 입력 받기 System.out.println("[게시물 입력]"); System.out.print("bno : "); int bno = Integer.parseInt(scanner.nextLine()); // boards 테이블에서 해당 게시물을 가져와 출력 try { String sql = "" + "SELECT bno, btitle, bcontent, bwriter, bdate " + "FROM boards " + "WHERE bno=?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1, bno); ResultSet rs = pstmt.executeQuery(); if(rs.next()) { Board board = new Board(); board.setBno(rs.getInt("bno")); board.setBtitle(rs.getString("btitle")); board.setBcontent(rs.getString("bcontent")); board.setBwriter(rs.getString("bwriter")); board.setBdate(rs.getDate("bdate")); System.out.println("##########"); System.out.println("번호:" + board.getBno()); System.out.println("제목:" + board.getBtitle()); System.out.println("내용:" + board.getBcontent()); System.out.println("작성자:" + board.getBwriter()); System.out.println("날짜:" + board.getBdate()); System.out.println("##########"); // 보조 메뉴 출력 System.out.println("---------------------------------------"); System.out.println("보조 메뉴: 1.Update | 2.Delete | 3.List"); System.out.print("메뉴 선택: "); String menuNo = scanner.nextLine(); System.out.println(); if(menuNo.equals("1")) { update(board); } else if(menuNo.equals("2")) { delete(board); } } rs.close(); pstmt.close(); } catch (Exception e) { e.printStackTrace(); exit(); } list(); } // [게시물 목록] // ------------------------------------------------------------ // no writer date title // ------------------------------------------------------------ // 14 winter 2023-02-14 봄이 왔어요. // 13 winter 2023-02-14 크리스마스 // 12 winter 2023-02-14 눈 오는 날 // // ------------------------------------------------------------ // 메인 메뉴 : 1.Create | 2.Read | 3.Clear | 4.Exit // 메뉴 선택: 2 // // [게시물 입력] // bno : 14 // ########## // 번호:14 // 제목:봄이 왔어요. // 내용:봄이 오면 벚꽃이 피겠죠? // 작성자:winter // 날짜:2023-02-14 // ##########
숫자 2를 입력하면 현재 작성되어 있는 게시물을 출력합니다.
8. update 메서드
public void update(Board board) { //수정 내용 입력 받기 System.out.println("[수정 내용 입력]"); System.out.print("제목: "); board.setBtitle(scanner.nextLine()); System.out.print("내용: "); board.setBcontent(scanner.nextLine()); System.out.print("작성자: "); board.setBwriter(scanner.nextLine()); System.out.println("------------------------------------------------------------"); System.out.println("보조 메뉴 : 1.Ok | 2.Cancle"); System.out.print("메뉴 선택 : "); String menuNo = scanner.nextLine(); // 보조 메뉴 출력 if(menuNo.equals("1")) { // boards 테이블에서 게시물 정보 수정 try { String sql = "" + "UPDATE boards SET btitle=?, bcontent=?, bwriter=? " + "WHERE bno=?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, board.getBtitle()); pstmt.setString(2, board.getBcontent()); pstmt.setString(3, board.getBwriter()); pstmt.setInt(4, board.getBno()); pstmt.executeUpdate(); pstmt.close(); } catch(Exception e) { e.printStackTrace(); exit(); } } list(); }
read에서 호출했던 update() 메서드를 만듭니다.
update를 실행하면 게시물의 내용이 수정됩니다.
9. delete 메서드
public void delete(Board board) { // boards 테이블에 게시물 정보 삭제 try { String sql = "DELETE FROM boards WHERE bno=?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1, board.getBno()); pstmt.executeUpdate(); pstmt.close(); } catch(Exception e) { e.printStackTrace(); exit(); } list(); }
read에서 호출했던 delete() 메서드를 만듭니다.
delete를 실행하면 게시물이 삭제됩니다.
10. clear 메서드
public void clear() { System.out.println("[게시물 전체 삭제]"); System.out.println("------------------------------------------------------------"); System.out.println("보조 메뉴 : 1.Ok | 2.Cancle"); System.out.print("메뉴 선택 : "); String menuNo = scanner.nextLine(); if(menuNo.equals("1")) { // boards 테이블에서 게시물 정보 전체 삭제 try { String sql = "TRUNCATE TABLE boards"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.executeUpdate(); pstmt.close(); } catch(Exception e) { e.printStackTrace(); exit(); } } list(); }
숫자 3을 입력하고 Ok를 누르면 모든 게시물을 삭제합니다.
11. exit 메서드
public void exit() { if(conn != null) { try { conn.close(); } catch (SQLException e) { } } System.out.println("** 게시판 종료 **"); System.exit(0); }
숫자 4를 입력하면 더이상 입력을 할 수 없고 console이 종료됩니다.
12. 전체 출력 표시
[게시물 목록] ------------------------------------------------------------ no writer date title ------------------------------------------------------------ 14 winter 2023-02-14 봄이 왔어요. 13 winter 2023-02-14 크리스마스 12 winter 2023-02-14 눈 오는 날 ------------------------------------------------------------ 메인 메뉴 : 1.Create | 2.Read | 3.Clear | 4.Exit 메뉴 선택: 1 [새 게시물 입력] 제목 : 게시판 제목 내용 : 게시판 내용 작성자 : 게시판 작성자 ------------------------------------------------------------ 보조 메뉴 : 1.Ok | 2.Cancle 메뉴 선택 : 1 [게시물 목록] ------------------------------------------------------------ no writer date title ------------------------------------------------------------ 15 게시판 작성자 2023-02-14 게시판 제목 14 winter 2023-02-14 봄이 왔어요. 13 winter 2023-02-14 크리스마스 12 winter 2023-02-14 눈 오는 날 ------------------------------------------------------------ 메인 메뉴 : 1.Create | 2.Read | 3.Clear | 4.Exit 메뉴 선택: 2 [게시물 입력] bno : 15 ########## 번호:15 제목:게시판 제목 내용:게시판 내용 작성자:게시판 작성자 날짜:2023-02-14 ########## --------------------------------------- 보조 메뉴: 1.Update | 2.Delete | 3.List 메뉴 선택: 1 [수정 내용 입력] 제목: 게시판 제목(수정) 내용: 게시판 내용(수정) 작성자: 게시판 작성자(수정) ------------------------------------------------------------ 보조 메뉴 : 1.Ok | 2.Cancle 메뉴 선택 : 1 [게시물 목록] ------------------------------------------------------------ no writer date title ------------------------------------------------------------ 15 게시판 작성자(수정) 2023-02-14 게시판 제목(수정) 14 winter 2023-02-14 봄이 왔어요. 13 winter 2023-02-14 크리스마스 12 winter 2023-02-14 눈 오는 날 ------------------------------------------------------------ 메인 메뉴 : 1.Create | 2.Read | 3.Clear | 4.Exit 메뉴 선택: 2 [게시물 입력] bno : 15 ########## 번호:15 제목:게시판 제목(수정) 내용:게시판 내용(수정) 작성자:게시판 작성자(수정) 날짜:2023-02-14 ########## --------------------------------------- 보조 메뉴: 1.Update | 2.Delete | 3.List 메뉴 선택: 2 [게시물 목록] ------------------------------------------------------------ no writer date title ------------------------------------------------------------ 14 winter 2023-02-14 봄이 왔어요. 13 winter 2023-02-14 크리스마스 12 winter 2023-02-14 눈 오는 날 ------------------------------------------------------------ 메인 메뉴 : 1.Create | 2.Read | 3.Clear | 4.Exit 메뉴 선택: 3 [게시물 전체 삭제] ------------------------------------------------------------ 보조 메뉴 : 1.Ok | 2.Cancle 메뉴 선택 : 1 [게시물 목록] ------------------------------------------------------------ no writer date title ------------------------------------------------------------ ------------------------------------------------------------ 메인 메뉴 : 1.Create | 2.Read | 3.Clear | 4.Exit 메뉴 선택: 4 ** 게시판 종료 **
전체 실행시켜 보았을 때 원하던 모든 기능들을 구현할 수 있었습니다.
해당 내용들은 oracle의 주소들과 연결이 되어있고 java에 작성하면 바로 commit이 되므로 반영이 됩니다.
데이터를 실제로 입력하고 연결해보니 점점 더 흥미가 있는데요
이제 프로젝트를 해보면서 응용해보면 되겠네요!!!!
많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~
'BackEnd > Java' 카테고리의 다른 글
[java] 이것이 자바다 부록 Java UI 1 (Swing) (0) | 2023.02.15 |
---|---|
[java] 이것이 자바다 부록 MySQL과 연동 (0) | 2023.02.15 |
[java] 이것이 자바다 ch20 데이터베이스 입출력 3(프로시저, 함수 호출, 트랜잭션) (0) | 2023.02.14 |
[java] 이것이 자바다 ch20 데이터베이스 입출력 2(UPDATE, DELETE, ResultSet) (0) | 2023.02.14 |
[java] 이것이 자바다 ch20 데이터베이스 입출력 1(JDBC, Oracle SQL, INSERT) (1) | 2023.02.14 |