오늘이라도

[Java]42. JDBC 복습 본문

취업성공패키지 SW 개발자 교육/Java

[Java]42. JDBC 복습

upcake_ 2020. 5. 11. 19:14
반응형

 

https://github.com/upcake/Class_Examples

교육 중에 작성한 예제들은 깃허브에 올려두고 있습니다. 

gif 파일은 클릭해서 보는 것이 정확합니다.


- JDBC 복습 -

BookMain.java : 메인 화면

import java.util.Scanner;

public class BookMain {
	public static void menuPrint() {
		System.out.println("\n=====도서 관리====");
		System.out.println("도서 정보 등록 : I");
		System.out.println("도서 목록 보기 : A");
		System.out.println("도서 제목 검색 : S");
		System.out.println("도서 정보 삭제 : D");
		System.out.println("도서 정보 수정 : U");
		System.out.println("도서 주문 신청 : O");
		System.out.println("도서 관리 종료 : E");
		System.out.println("==================\n");
	}
	
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
				
		while(true) {
			menuPrint();
			System.out.print("메뉴를 입력하세요> ");
			String menu = scanner.nextLine();
			BookInput input = new BookInput(scanner);
			
			if(menu.equalsIgnoreCase("i")) {
				input.bookInsertInput();
			} else if (menu.equalsIgnoreCase("a")) {
				input.bookSearchAllInput();
			} else if (menu.equalsIgnoreCase("d")) {
				input.bookDeleteInput();
			} else if (menu.equalsIgnoreCase("u")) {
				input.bookUpdateInput();
			} else if (menu.equalsIgnoreCase("s")) {
				input.bookSearchTitleInput();
			} else if (menu.equalsIgnoreCase("o")) {
				input.bookOrderInput();
			} else if(menu.equalsIgnoreCase("e")) {
				System.out.print("정말 종료하시겠습니까(Y/N)> ");
				String isExit = scanner.nextLine();
				if(isExit.equalsIgnoreCase("y")) {
					System.out.println("도서 관리 프로그램을 종료합니다.");
					BookDAO dao = new BookDAO();
					dao.dbClose();
					System.exit(0);
					break;
				} else if (isExit.equalsIgnoreCase("n")) {
					System.out.println("취소하셨습니다.");
					continue;
				} else {
					System.out.println("잘못 입력하셨습니다.");
					continue;
				} // if, else if, else
			} else {
				System.out.println("잘못 입력하셨습니다.");
				continue;
			} // if else
		} // while()
	} // main()
} // class

 

 

▼BookInput.java : 입력을 담당하는 클래스

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Scanner;

public class BookInput {
	private Scanner scanner;
	public BookInput(Scanner scanner) {
		this.scanner = scanner;
	}
	//도서 정보 등록 서브 화면
	public void bookInsertInput() {
		System.out.println("\n도서 정보 등록 화면입니다.");
		System.out.print("등록할 도서의 번호를 입력하세요> ");
		int num = Integer.parseInt(scanner.nextLine());
		BookDAO dao = new BookDAO();
		ResultSet rs = dao.checkNum(num);
		try {
			if(rs.next() == true) {	// 검색 결과가 있다.
				System.out.println(num + "번 도서는 이미 등록되어 있습니다!");
				System.out.println("다른 번호를 입력해주세요!");
			} else {				// 검색 결과가 없다 : 사용 가능 → 추가 정보 입력받는다. 
				System.out.print("제목을 입력하세요> ");
				String title = scanner.nextLine();
				System.out.print("출판사를 입력하세요> ");
				String company = scanner.nextLine();
				System.out.print("저자를 입력하세요> " );
				String name = scanner.nextLine();
				System.out.print("단가를 입력하세요> ");
				int cost = Integer.parseInt(scanner.nextLine());
//				System.out.println(num + "\t" + title + "\t" + company + "\t" + name + "\t" + cost); // 제대로 나오는지 확인하는 라인
				
				BookDTO dto = new BookDTO(num, title, company, name, cost);
				int succ = dao.insertBook(dto);
				if(succ > 0) {
					System.out.println(num + "번 도서 정보가 등록되었습니다.");
				} else {
					System.out.println(num + "번 도서 정보가 등록 실패하였습니다.");
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("bookInsertInput() Exception!!!");
		}
	} // bookInsertInput()
	
	// 도서 목록 보기
	public void bookSearchAllInput() {
		System.out.println("\n도서 목록 보기 화면입니다.");
		ArrayList<BookDTO> list = new ArrayList<>();
		BookDAO dao = new BookDAO();
		list = dao.selectBookAll(list);
		dao.display(list);
	} // bookSearchAllInput()
	
	// 도서 제목 검색
	public void bookSearchTitleInput() {
		System.out.println("\n도서 제목 검색 화면입니다.");
		System.out.print("검색할 도서의 제목을 입력하세요> ");
		String searchTitle = scanner.nextLine();
		ArrayList<BookDTO> list = new ArrayList<>();
		BookDAO dao = new BookDAO();
		dao.selectBookTitle(list, searchTitle);
		dao.display(list);
	} // bookSearchTitleInput()
	
	// 도서 정보 삭제
	public void bookDeleteInput() {
		System.out.println("\n도서 정보 삭제 화면입니다.");
		System.out.print("삭제할 도서의 번호를 입력하세요> ");
		int num = Integer.parseInt(scanner.nextLine());
		BookDAO dao = new BookDAO();
		ResultSet rs = dao.checkNum(num);
		
		try {
			if(rs.next() != true) { // 해당 번호가 없으면
				System.out.println(num + "번 도서는 등록되어 있지 않습니다.");
			} else {
				int succ = dao.deleteBook(num);
				if(succ > 0) {
					System.out.println(num + "번 도서정보가 삭제되었습니다.");
				} else {
					System.out.println(num + "번 도서정보 삭제에 실패했습니다.");
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("bookDeleteInput() Exception!!!");
		}
	} // bookDeleteInput()
	
	// 도서 정보 수정
	public void bookUpdateInput() {
		System.out.println("\n도서 정보 수정 화면입니다.");
		System.out.print("수정할 도서의 번호를 입력하세요> ");
		int num = Integer.parseInt(scanner.nextLine());
		BookDAO dao = new BookDAO();
		ResultSet rs = dao.checkNum(num);
		try {
			if(rs.next() != true) {
				System.out.println(num + "번 도서는 등록되어 있지 않습니다.");
			} else {
				System.out.print("수정할 도서의 제목을 입력하세요> ");
				String title = scanner.nextLine();
				System.out.print("수정할 도서의 출판사를 입력하세요> ");
				String company = scanner.nextLine();
				System.out.print("수정할 도서의 저자를 입력하세요> ");
				String name = scanner.nextLine();
				System.out.print("수정할 도서의 단가를 입력하세요> ");
				int cost = Integer.parseInt(scanner.nextLine());
				BookDTO dto = new BookDTO(num, title, company, name, cost);
				int succ = dao.updateBook(dto);
				if(succ > 0) {
					System.out.println(num + "번 도서정보가 수정되었습니다.");
				} else {
					System.out.println(num + "번 도서정보 수정에 실패했습니다.");
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("bookUpdateInput() Exception!!!");
		}
	} // bookUpdateInput()
	
	// 도서 주문 신청
	public void bookOrderInput() {
		System.out.println("\n도서 주문 신청 화면입니다");
		System.out.print("주문할 도서의 번호를 입력하세요> ");
		int num = Integer.parseInt(scanner.nextLine());
		BookDAO dao = new BookDAO();
		ResultSet rs = dao.checkNum(num);
		try {
			if(rs.next() != true) { 
				System.out.println("입력하신 " + num + "번 도서는 등록되어 있지 않습니다.");
			} else {
				System.out.print("주문할 도서의 수량을 입력하세요> ");
				int cnt = Integer.parseInt(scanner.nextLine());
				
				dao.orderBook(rs, cnt);
				
//				String title = rs.getString("title");
//				int cost = rs.getInt("cost");
//				int price = cnt * cost;
//				
//				DecimalFormat df = new DecimalFormat("₩#,##0");
//				String msg = "\n주문하신 도서 명은 " + title + "이고, ";
//				msg += "단가는 " + df.format(cost) + "원이며, ";
//				msg += "주문 수량은 " + cnt + "권 입니다.";
//				msg += "\n총 주문 금액은 " + df.format(price) + "원입니다.";
//				
//				System.out.println(msg);
			}
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("bookOrderInput() Exception!!!");
		}
	} // bookOrderInput()
} // class

 

 

▼SingleConn.java : DB로의 접속 기능만을 담당하는 SingleTon 클래스

import java.sql.Connection;
import java.sql.DriverManager;

public class SingleConn {	// SingleTon Class : 특정 역할 하나만 수행하는 클래스
	// 연결 객체 정의
	private static Connection conn;
	
	// 초기화 블럭(static 블럭) : 가장 먼저 메모리에 로딩 → 실행
	static {
		String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
		String user = "hanul";
		String password = "0000";
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection(url, user, password);
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("DB Connection Exception!!!");
		}
	}

	//getConn() 정의
	public static Connection getConn() {
		return conn;
	}
} // class

 

 

▼BookDTO.java : 도서 정보를 저장할 양식을 제공하는 클래스

public class BookDTO {
	private int num;
	private String title, company, name;
	private int cost;
	
	public BookDTO() {}

	public BookDTO(int num, String title, String company, String name, int cost) {
		super();
		this.num = num;
		this.title = title;
		this.company = company;
		this.name = name;
		this.cost = cost;
	}

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getCompany() {
		return company;
	}

	public void setCompany(String company) {
		this.company = company;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getCost() {
		return cost;
	}

	public void setCost(int cost) {
		this.cost = cost;
	}
	
	
} // class

 

 

▼BookDAO.java : 프로그램에 필요한 각종 기능(Method)를 담당하는 클래스

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.DecimalFormat;
import java.util.ArrayList;

public class BookDAO {
	private Connection conn = SingleConn.getConn();
	private PreparedStatement ps;
	private ResultSet rs;
	
	// 도서 번호 조회
	public ResultSet checkNum(int num) {
		String sql = "SELECT * FROM tblBook WHERE num = ?";
		try {
			ps = conn.prepareStatement(sql);
			ps.setInt(1, num);
			rs = ps.executeQuery();
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("checkNum() Exception!!!");
		}
		return rs;
	} // checkNum()
	
	// 도서 정보 등록
	public int insertBook(BookDTO dto) {
		int succ = 0;
		String sql = "INSERT INTO tblBook VALUES(?, ?, ?, ?, ?)";
		try {
			ps = conn.prepareStatement(sql);
			ps.setInt(1, dto.getNum());
			ps.setString(2, dto.getTitle());
			ps.setString(3, dto.getCompany());
			ps.setString(4, dto.getName());
			ps.setInt(5, dto.getCost());
			succ = ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("insertBook() Exception!!!");
		}
		return succ;
	} // insertBook()
	
	public ArrayList<BookDTO> selectBookAll(ArrayList<BookDTO> list) {
		String sql = "SELECT * FROM tblBook ORDER BY num ASC";
		try {
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			while(rs.next()) {
				int num = rs.getInt("num");
				String title = rs.getString("title");
				String company = rs.getString("company");
				String name = rs.getString("name");
				int cost = rs.getInt("cost");
				
				BookDTO dto = new BookDTO(num, title, company, name, cost);
				list.add(dto);
			}
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("selectBookAll() Exception!!!");
		}
		return list;
	} // selectBookAll()
	
	// 출력 메서드
	public void display(ArrayList<BookDTO> list) {
		if(list.size() == 0) { 
			System.out.println("검색된 결과가 없습니다.");
		} else {
			for (BookDTO dto : list) {
				System.out.print(dto.getNum() + "\t");
				System.out.print(dto.getTitle() + "\t");
				System.out.print(dto.getCompany() + "\t");
				System.out.print(dto.getName() + "\t");
				System.out.print(dto.getCost() + "\n");
			}
		}
	} // display()
	
	// 제목 검색 메서드
	public void selectBookTitle(ArrayList<BookDTO> list, String searchTitle) {
		String sql = "SELECT * FROM tblBook WHERE UPPER(title) LIKE UPPER(?)";
		try {
			ps = conn.prepareStatement(sql);
			ps.setString(1, "%" + searchTitle + "%");
			rs = ps.executeQuery();
			while(rs.next()) {
				int num = rs.getInt("num");
				String title = rs.getString("title");
				String company = rs.getString("company");
				String name = rs.getString("name");
				int cost = rs.getInt("cost");
				
				BookDTO dto = new BookDTO(num, title, company, name, cost);
				list.add(dto);
			}
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("selectBookTitle() Exception!!!");
		}
	} // selectBookTitle()
	
	// 도서 정보 삭제 메서드
	public int deleteBook(int num) {
		int succ = 0;
		String sql = "DELETE FROM tblBook WHERE num = ?";
		try {
			ps = conn.prepareStatement(sql);
			ps.setInt(1, num);
			succ = ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("deleteBook() Exception!!!");
		}
		return succ;
		
	} // deleteBook()
	
	// 도서 정보 수정 메서드
	public int updateBook(BookDTO dto) {
		int succ = 0;
		String sql = "UPDATE tblBook SET title = ?, company = ?, ";
		sql += "name = ?, cost = ? WHERE num = ?";
		try {
			ps = conn.prepareStatement(sql);
			ps.setString(1, dto.getTitle());
			ps.setString(2, dto.getCompany());
			ps.setString(3, dto.getName());
			ps.setInt(4, dto.getCost());
			ps.setInt(5, dto.getNum());
			succ = ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("updateBook() Exception!!!");
		}
		return succ;
	}
	
	// 도서 주문 메서드
	public void orderBook(ResultSet rs, int cnt) {
		try {
			String title = rs.getString("title");
			int cost = rs.getInt("cost");
			int price = cnt * cost;
			
			DecimalFormat df = new DecimalFormat("₩#,##0");
			String msg = "\n주문하신 도서 명은 " + title + "이고, ";
			msg += "단가는 " + df.format(cost) + "원이며, ";
			msg += "주문 수량은 " + cnt + "권 입니다.";
			msg += "\n총 주문 금액은 " + df.format(price) + "원입니다.";
			
			System.out.println(msg);
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("orderBook() Exception!!!");
		}
	} // orderBook()
	
	// DB Close
	public void dbClose() {
		try {
			if(rs != null) rs.close();
			if(ps != null) ps.close();
			if(conn != null) conn.close();
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("dbClose() Exception!!!");
		}
	}
} // class

 

 

▲도서관리 작동 화면

 

반응형