본문 바로가기

순이코딩/Java

[Java] JDBC 실습 - 도서 관리 시스템을 만들어보자

728x90
반응형

 


 

JDBC 실습으로 도서 관리 시스템을 만들었습니다.


기본 출력문

1. 도서등록

  • 사용자에게 책 제목, 저자, 가격, 번호를 입력받아 DB에 저장
  • 책 등록에 성공하면 "도서등록이 완료되었습니다." 출력
  • 책 등록에 실패하면 "도서등록에 실패했습니다. 다시 시도하세요." 출력

 

2. 도서검색

  • 사용자에게 책 제목을 입력받아
  • 데이터가 있으면 "책제목(저자) : 가격 - 책번호" 출력
  • 없으면 "도서검색에 실패했습니다. 다시 시도하세요." 출력

 

3. 도서전체 조회

  • "순번. 책제목(저자) : 가격 - 책번호" 형식으로 전체 목록 출력

 

4. 도서삭제

  • 사용자에게 책 번호를 입력받아 해당 책에 대한 정보 삭제
  • 삭제에 성공하면 "책에 대한 정보가 삭제되었습니다." 출력
  • 삭제에 실패하면 "책 번호를 다시 한번 확인해 주세요." 출력

 

5. 도서 정보변경

  • 사용자에게 책 제목을 입력받아 책의 번호와 책의 가격을 변경
  • 변경에 성공하면 "도서 정보가 업데이트되었습니다." 출력
  • 변경에 실패하면 "도서 정보 업데이트에 실패했습니다. 다시 시도하세요." 출력

 

6. 프로그램 종료


 

■ BookDTO 클래스

가장 먼저 기본적으로 사용될 변수가 있는 필드, 생성자 메서드, getter/setter 메서드가 있는 DTO 클래스부터 생성했습니다.

package model;

public class BookDTO {

	private String title;
	private String name;
	private int price;
	private String booknum;

	public BookDTO(String title, String name, int price, String booknum) {
		this.title = title;
		this.name = name;
		this.price = price;
		this.booknum = booknum;

	}

	public String getTitle() {
		return title;
	}

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

	public String getName() {
		return name;
	}

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

	public int getPrice() {
		return price;
	}

	public void setPrice(int price) {
		this.price = price;
	}

	public String getBooknum() {
		return booknum;
	}

	public void setBooknum(String booknum) {
		this.booknum = booknum;
	}

}

 

■ Main클래스

 

 

package view;

import java.util.Scanner;

import controller.BookController;
import model.BookDTO;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		while (true) {

			System.out.println("====================== 도서 관리 시스템 ======================");
			System.out.print("[1]도서등록 [2]도서검색 [3]도서전체조회" + "[4]도서삭제 [5]도서정보변경 [6]종료 >> ");
			int select = sc.nextInt();

			if (select == 1) {
				// 도서 등록(insert)
				sc.nextLine();
				System.out.print("책 제목 : ");
				String title = sc.nextLine();
				System.out.print("저자 : ");
				String name = sc.nextLine();
				System.out.print("가격 : ");
				int price = sc.nextInt();
				sc.nextLine();
				System.out.print("번호 : ");
				String booknum = sc.nextLine();
				BookController con = new BookController();
				BookDTO dto = new BookDTO(title, name, price, booknum);
				con.insert(dto);

			} else if (select == 2) {
				// 도서검색(selectOne)
				sc.nextLine();
				System.out.print("책 제목 : ");
				String title = sc.nextLine();
				BookController con = new BookController();
				BookDTO dto = new BookDTO(title, null, 0, null);
				con.selectOne(dto);

			} else if (select == 3) {
				// 도서전체 조회(selectAll)
				BookController con = new BookController();
				con.selectAll();

			} else if (select == 4) {
				// 도서삭제(delete)
				System.out.print("번호 : ");
				sc.nextLine();
				String booknum = sc.nextLine();
				BookController con = new BookController();
				BookDTO dto = new BookDTO(null, null, 0, booknum);
				con.delete(dto);

			} else if (select == 5) {
				// 도서정보변경(update)
				sc.nextLine();
				System.out.print("책 제목 : ");
				String title = sc.nextLine();
				System.out.print("변경할 책 번호 : ");
				String booknum = sc.nextLine();
				System.out.print("변경할 책 가격 : ");
				int price = sc.nextInt();

				BookController con = new BookController();
				BookDTO dto = new BookDTO(title, null, price, booknum);
				con.update(dto);

			} else if (select == 6) {
				System.out.println("프로그램 종료");
				break;

			} else {
				System.out.println("다시 선택해주세요.");
			}
		}

	}

}

 

■ BookController클래스

 

package controller;

import java.util.ArrayList;

import model.BookDAO;
import model.BookDTO;

public class BookController {

	// insert
	public void insert(BookDTO dto) {
		BookDAO dao = new BookDAO();
		int cnt = dao.insert(dto);
		if (cnt > 0) {
			System.out.println("도서등록이 완료되었습니다.");
		} else {
			System.out.println("도서등록에 실패했습니다. 다시 시도하세요.");
		}
	}

	// selectOne
	public void selectOne(BookDTO dto) {
		BookDAO dao = new BookDAO();
		String data = dao.selectOne(dto);
		if (data.equals("")) {
			System.out.println("도서검색에 실패했습니다. 다시 시도하세요.");
		} else {
			System.out.println(data);
		}
	}

	// selectAll
	public void selectAll() {
		BookDAO dao = new BookDAO();
		ArrayList<BookDTO> list = dao.selectAll();
		
		for(int i = 0; i<list.size();i++) {
			String title  = list.get(i).getTitle();
			String name  = list.get(i).getName();
			int price  = list.get(i).getPrice();
			String booknum  = list.get(i).getBooknum();
			
			System.out.printf("%d. %s(%s) : %d원 - %s%n", i+1, title, name, price, booknum);
			
		}
				
	}

	// delete
	public void delete(BookDTO dto) {
		BookDAO dao = new BookDAO();
		int cnt = dao.delete(dto);
		if (cnt > 0) {
			System.out.println("책에 대한 정보가 삭제되었습니다.");
		} else {
			System.out.println("책 번호를 다시 한번 확인해주세요.");
		}

	}

	// update
	public void update(BookDTO dto) {
		BookDAO dao = new BookDAO();
		int cnt = dao.update(dto);
		if (cnt > 0) {
			System.out.println("도서 정보가 업데이트되었습니다.");
		} else {
			System.out.println("도서 정보 업데이트에 실패했습니다. 다시 시도하세요.");
		}
	}

}


■ BookDAO 클래스

SQL문 작성 및 전송 전에 하는 동적연결, DB연결과 전송 후에 실행하는 close는 모두 공통되기 때문에 메서드로 만들었습니다.

package model;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class BookDAO {

	Connection conn = null;
	PreparedStatement psmt = null;
	ResultSet rs = null;
	int cnt = 0;
	String data = "";

	// getCon : DB에 연결권한을 확인하는 메서드(기능)
	public void getCon() {
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");

			String url = "jdbc:oracle:thin:@localhost:1521:xe";
			String db_id = "SERVICE";
			String db_pw = "12345";
			conn = DriverManager.getConnection(url, db_id, db_pw);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}

	}

	// getClose
	public void getClose() {
		try {
			if (rs != null)
				rs.close();
			if (psmt != null)
				psmt.close();
			if (conn != null)
				conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	// insert
	public int insert(BookDTO dto) {
		getCon();
		String sql = "insert into book values(?, ?, ?, ?)";

		try {
			psmt = conn.prepareStatement(sql);

			psmt.setString(1, dto.getTitle());
			psmt.setString(2, dto.getName());
			psmt.setInt(3, dto.getPrice());
			psmt.setString(4, dto.getBooknum());

			cnt = psmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		getClose();
		return cnt;
	}

	// slectOne
	public String selectOne(BookDTO dto) {
		getCon();
		String sql = "SELECT * FROM book WHERE title = ?";
		try {
			psmt = conn.prepareStatement(sql);

			psmt.setString(1, dto.getTitle());

			rs = psmt.executeQuery();

			if (rs.next()) {
				String title = rs.getString(1);
				String name = rs.getString(2);
				int price = rs.getInt(3);
				String booknum = rs.getString(4);

				data = data + title + "(" + name + ")" + " : " + price + "원 - " + booknum;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		getClose();
		return data;
	}

	// selectAll
	public ArrayList<BookDTO> selectAll() {
		getCon();
		ArrayList<BookDTO> list = new ArrayList<>();

		String sql = "SELECT * FROM book";

		try {
			psmt = conn.prepareStatement(sql);

			rs = psmt.executeQuery();

			while (rs.next()) {

				String title = rs.getString(1);
				String name = rs.getString(2);
				int price = rs.getInt(3);
				String booknum = rs.getString(4);

				BookDTO dto = new BookDTO(title, name, price, booknum);
				list.add(dto);

				// 매개변수, 리턴값 없이 바로 출력
//				System.out.printf("[%s(%s) : %d원 - %s]%n", title, name, price, booknum);

			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		getClose();
		return list;

	}

	// delete
	public int delete(BookDTO dto) {
		getCon();
		String sql = "delete from book where booknum = ?";

		try {
			psmt = conn.prepareStatement(sql);
			psmt.setString(1, dto.getBooknum());

			cnt = psmt.executeUpdate();

		} catch (SQLException e) {
			e.printStackTrace();
		}
		getClose();
		return cnt;
	}

	// update
	public int update(BookDTO dto) {
		getCon();
		String sql = "update book set price = ?, booknum = ? where title = ?";

		try {
			psmt = conn.prepareStatement(sql);

			psmt.setInt(1, dto.getPrice());
			psmt.setString(2, dto.getBooknum());
			psmt.setString(3, dto.getTitle());

			cnt = psmt.executeUpdate();

		} catch (SQLException e) {
			e.printStackTrace();
		}
		getClose();
		return cnt;
	}
}

 

 

 

728x90
반응형