JAVA - Oracle JDBC(도서관리프로그램) 예제

도서관리 프로그램 

도서관리 프로그램 을 만들어볼려고한다.

사용에 필요한 오라클 은 아래와같다.

기능

1. 도서 추가

2. 도서정보수정

3. 도서 삭제(도서 아이디 지정하여)

4. 도서 아이디로 조회

5. 도서 제목으로 조회

6. 도서 목록 전체 조회

 

Controller, Service, Dao 

체계적으로 작성해볼려 한다.

 

Book.class

package book.model.vo;

public class Book {
	/*
	 * BOOK_ID	NUMBER
		TITLE	VARCHAR2(50 BYTE)
		AUTHOR	VARCHAR2(20 BYTE)
		PUBLISHER	VARCHAR2(20 BYTE)
		PUBLISHER_DATE	DATE
		PRICE	NUMBER
	 * */
	
	private int bookId;				// 도서 번호
	private String title;			// 도서명
	private String author;			// 작가명
	private String publisher;		// 출판사
	private String publisherDate;	// 출판일 - String형식으로 받아 입력예정
	private int price;				// 가격

	//생성자
	public Book() {}
	
	// 매개변수 생성자 - bookId는 BOOK_SEQ 이용하여 입력 예정
	public Book(String title, String author, String publisher, String publisherDate, int price) {
		super();
		this.title = title;
		this.author = author;
		this.publisher = publisher;
		this.publisherDate = publisherDate;
		this.price = price;
	}

	// 매개변수 생성자 
	public Book(int bookId, String title, String author, String publisher, String publisherDate, int price) {
		super();
		this.bookId = bookId;
		this.title = title;
		this.author = author;
		this.publisher = publisher;
		this.publisherDate = publisherDate;
		this.price = price;
	}

	// getter/setter
	public int getBookId() {
		return bookId;
	}

	public void setBookId(int bookId) {
		this.bookId = bookId;
	}

	public String getTitle() {
		return title;
	}

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

	public String getAuthor() {
		return author;
	}

	public void setAuthor(String author) {
		this.author = author;
	}

	public String getPublisher() {
		return publisher;
	}

	public void setPublisher(String publisher) {
		this.publisher = publisher;
	}

	public String getPublisherDate() {
		return publisherDate;
	}

	public void setPublisherDate(String publisherDate) {
		this.publisherDate = publisherDate;
	}

	public int getPrice() {
		return price;
	}

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

	// 북정보
	@Override
	public String toString() {
		return "Book [bookId=" + bookId + ", title=" + title + ", author=" + author + ", publisher=" + publisher
				+ ", publisherDate=" + publisherDate + ", price=" + price + "]";
	}
}

 

BookMenu.class

package book.view;

import java.util.Scanner;

import book.controller.bookController;
import book.model.vo.Book;

public class BookMenu {
	
	// 입력을 위한 스캐너
	Scanner sc = new Scanner(System.in);
	bookController bc = new bookController();
	
	public void displayBookMenu() {
		/*
		 *  1. 도서 추가
		 *  2. 도서 정보 수정
		 *  3. 도서 삭제
		 *  4. 도서 아이디로 조회
		 *  5. 도서 제목으로 조회
		 *  6. 도서 목록 전체 조회
		 *  9. 끝내기
		 * */
		while(true) {
			System.out.println("=== 도서 관리 프로그램 ===");
			System.out.println("1. 도서 추가");
			System.out.println("2. 도서 정보 수정");
			System.out.println("3. 도서 삭제");
			System.out.println("4. 도서 아이디로 조회");
			System.out.println("5. 도서 제목으로 조회");
			System.out.println("6. 도서 목록 전체 조회");
			System.out.println("9. 끝내기");
			System.out.println("============================");
			System.out.print("번호 입력 : ");
			int num = sc.nextInt();
			sc.nextLine(); 
			
			switch(num) {
			case 1 :
				bc.bookInsert(bookAdd());
				break;
			case 2 :
				bc.bookUpdate(bookId(), bookAdd());
				break;
			case 3 :
				bc.bookDelete(bookId());
				break;
			case 4 :
				bc.bookSelectId(bookId());
				break;
			case 5 :
				bc.bookSelectTitle(bookTitle());
				break;
			case 6 :
				bc.bookSelectAll();
				break;
			case 9 :
				System.out.println("프로그램을 종료합니다.");
				return;
			default : 
				System.out.println("번호를 다시 입력해주세요.");
			}
			
		}
	}
	
	// 1.도서 정보 추가
	public Book bookAdd() {
		System.out.println("=== 도서 추가, 수정 ===");
		System.out.print("도서명 : ");
		String title = sc.nextLine();
		System.out.print("작가명 : ");
		String author = sc.nextLine();
		System.out.print("출판사 : ");
		String publisher = sc.nextLine();
		System.out.print("출판일(19900101 양식으로 입력) : ");
		String publisherDate = sc.nextLine();
		System.out.print("가격 : ");
		int price = sc.nextInt();
		sc.nextLine();
		
		Book book = new Book(title, author, publisher, publisherDate, price);
		
		return book;
	}
	
	// 4. 도서 정보(아이디)
	public int bookId() {
		System.out.print("도서 번호 입력 : ");
		return Integer.parseInt(sc.nextLine());
	}
	
	// 5. 도서 정보(아이디)
	public String bookTitle() {
		System.out.print("도서 제목 입력 : ");
		return sc.nextLine();
	}

}

 

BookController

package book.controller;

import java.util.List;

import book.model.service.BookService;
import book.model.vo.Book;
import book.view.BookView;

public class bookController {

	private BookService bs = new BookService();
	private BookView bv = new BookView();
	
	// 1. 도서 추가
	public void bookInsert(Book bookAdd) {
		int result = bs.bookInsert(bookAdd);
		
		if(result > 0) {
			System.out.println("도서 정보 추가 완료");
		}else {
			bv.bookErrorMsg("insert");
		}
		
	}
	
	// 6. 목록 전체 조회
	public void bookSelectAll() {
		List<Book> bookList = bs.bookSelectAll();
		
		if(bookList.isEmpty()) {
			System.out.println("조회 정보가 없습니다.");
		} else {
			bv.bookSelectView(bookList);
		}
	}
	
	// 3. 도서 정보 삭제
	public void bookDelete(int bookId) {
		int result = bs.bookDelete(bookId);
		
		if(result > 0) {
			System.out.println("도서 정보 삭제 완료");
		}else {
			bv.bookErrorMsg("delete");
		}
		
	}

	// 2. 도서 정보 수정
	public void bookUpdate(int bookId, Book b) {
		Book book = b;
		book.setBookId(bookId);
		
		int result = bs.bookUpdate(book);
		
		if(result > 0) {
			System.out.println("도서 정보 수정 완료");
		}else {
			bv.bookErrorMsg("update");
		}
		
	}
	// 4. 도서 아이디로 조회
	public void bookSelectId(int bookId) {
		Book book = bs.bookSelectId(bookId);
		
		if(book == null) {
			bv.bookErrorMsg("bookId");
		}else {
			bv.bookSelectId(book);
		}
		
	}

	// 5. 도서 제목으로 조회
	public void bookSelectTitle(String bookTitle) {
		List<Book> bookList = bs.bookSelectTitle(bookTitle);
		
		if(bookList.isEmpty()) {
			System.out.println("조회 정보가 없습니다.");
		} else {
			bv.bookSelectView(bookList);
		} 
		
	}
	
	

}

 

BookService.class

package book.model.service;

// JDBCTemplate 클래스의 static 메소드 사용하기위해 static import 사용
import static book.common.JDBCTemplate.*;

import java.sql.Connection;
import java.util.List;

import book.model.dao.BookDAO;
import book.model.vo.Book;

public class BookService {
	private BookDAO bd = new BookDAO(); 

	public List<Book> bookSelectAll() {
		Connection conn = getConnection();
				
		List<Book> bookSelectAll = bd.bookSelectAll(conn); 
		
		close(conn);
		
		return bookSelectAll;
	}

	// 1. 도서 추가
	public int bookInsert(Book bookAdd) {
		Connection conn = getConnection();
		
		int result = bd.bookInsert(conn, bookAdd);
		
		if(result > 0) {
			commit(conn);
		}else {
			rollback(conn);
		}
		
		close(conn);
		
		return result;
	}
	
	// 3. 도서 정보 삭제
	public int bookDelete(int bookId) {
		Connection conn = getConnection();
		
		int result = bd.bookDelete(conn, bookId);
		
		if(result > 0) {
			commit(conn);
		}else {
			rollback(conn);
		}
		
		close(conn);
		
		
		return result;
	}

	// 2. 도서 정보 수정
	public int bookUpdate(Book book) {
		Connection conn = getConnection();
		
		int result = bd.bookUpdate(conn, book);
		
		if(result > 0) {
			commit(conn);
		}else {
			rollback(conn);
		}
		
		close(conn);
		
		return result;
	}
	// 4. 도서 아이디로 조회
	public Book bookSelectId(int bookId) {
		Connection conn = getConnection();
		
		Book book = bd.bookSelectId(conn, bookId);
		
		close(conn);
		
		return book;
	}
	
	// 5. 도서 제목으로 조회
	public List<Book> bookSelectTitle(String bookTitle) {
		Connection conn = getConnection();
		
		List<Book> bookList = bd.bookSelectTitle(conn, bookTitle);
		
		close(conn);
		
		return bookList;
	}

}

 

BookDAO.class

package book.model.dao;

import static book.common.JDBCTemplate.close;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import book.model.vo.Book;

public class BookDAO {

	// 도서 목록 전체 조회
	public List<Book> bookSelectAll(Connection conn) {
		String query = "SELECT * FROM BOOK";
		Statement stmt = null;
		ResultSet rs = null;
		List<Book> bookList = new ArrayList<>(); // 책 전체정보 담기위한 컬렉션
		
		try {
			stmt = conn.createStatement();
			
			rs = stmt.executeQuery(query);
			while(rs.next()) {
				int bookId = rs.getInt("BOOK_ID");
				String title = rs.getString("TITLE");
				String author = rs.getString("AUTHOR");
				String publisher = rs.getString("PUBLISHER");
				String publisherDate = rs.getString("PUBLISHER_DATE");
				int price = rs.getInt("PRICE");
				
				Book book = new Book(bookId, title, author, publisher, publisherDate, price);
				
				bookList.add(book);
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			close(rs);
			close(stmt);
		}
		
		return bookList;
	}

	// 도서 추가
	public int bookInsert(Connection conn, Book b) {
		String query = "INSERT INTO BOOK "
				     + "VALUES(BOOK_SEQ.NEXTVAL, ?, ?, ?, TO_DATE(?, 'RRRR/MM/DD'), ?)";
		PreparedStatement pstmt = null;
		int result = 0;
		
		try {
			pstmt = conn.prepareStatement(query);
			pstmt.setString(1, b.getTitle());
			pstmt.setString(2, b.getAuthor());
			pstmt.setString(3, b.getPublisher());
			pstmt.setString(4, b.getPublisherDate());
			pstmt.setInt(5, b.getPrice());
			
			result = pstmt.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			close(pstmt);
		}
		
		return result;
	}

	public int bookDelete(Connection conn, int bookId) {
		String query = "DELETE FROM BOOK "
				     + "WHERE BOOK_ID = ?";
		PreparedStatement pstmt = null;
		int result = 0;
		
		try {
			pstmt = conn.prepareStatement(query);
			pstmt.setInt(1, bookId);
			
			result = pstmt.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			close(pstmt);
		}
		
		
		return result;
	}

	// 2. 도서 정보 수정
	public int bookUpdate(Connection conn, Book book) {
		String query = "UPDATE BOOK "
				     + "SET TITLE = ?, AUTHOR = ?, PUBLISHER = ?, PUBLISHER_DATE = TO_DATE(?, 'RRRR/MM/DD'), PRICE = ? "
				     + "WHERE BOOK_ID = ?";
		PreparedStatement pstmt = null;
		int result = 0;
		
		try {
			pstmt = conn.prepareStatement(query);
			pstmt.setString(1, book.getTitle());
			pstmt.setString(2, book.getAuthor());
			pstmt.setString(3, book.getPublisher());
			pstmt.setString(4, book.getPublisherDate());
			pstmt.setInt(5, book.getPrice());
			pstmt.setInt(6, book.getBookId());
			
			result = pstmt.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			close(pstmt);
		}
		
		return result;
	}

	// 4. 도서 아이디로 조회
	public Book bookSelectId(Connection conn, int bookId) {
		String query = "SELECT * FROM BOOK "
				     + "WHERE BOOK_ID = ?";
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		Book book = null;
	
		try {
			pstmt = conn.prepareStatement(query);
			pstmt.setInt(1, bookId);
			
			rs = pstmt.executeQuery();
			
			while(rs.next()) {
				book = new Book(rs.getInt("BOOK_ID"),
								rs.getString("TITLE"),
								rs.getString("AUTHOR"),
								rs.getString("PUBLISHER"),
								rs.getString("PUBLISHER_DATE"),
								rs.getInt("PRICE"));
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			close(rs);
			close(pstmt);
		}
		
		return book;
	}

	// 5. 도서 제목으로 조회
	public List<Book> bookSelectTitle(Connection conn, String bookTitle) {
		String query = "SELECT * FROM BOOK "
				     + "WHERE TITLE LIKE ('%' || ? || '%')";
		
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		List<Book> listBook = new ArrayList<>();
		
		try {
			pstmt = conn.prepareStatement(query);
			pstmt.setString(1, bookTitle);
			
			rs = pstmt.executeQuery();
			while(rs.next()) {
				Book b = new Book();
				b.setBookId(rs.getInt("BOOK_ID"));
				b.setTitle(rs.getString("TITLE"));
				b.setAuthor(rs.getString("AUTHOR"));
				b.setPublisher(rs.getString("PUBLISHER"));
				b.setPublisher(rs.getString("PUBLISHER_DATE"));
				b.setPrice(rs.getInt("PRICE"));
				
				listBook.add(b);
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			close(rs);
			close(pstmt);
		}
		
		return listBook;
	}

}

 

JDBCTemplete

package book.common;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCTemplate {
	// JDBC 기본설정값
	
	// 오라클 연결
	public static Connection getConnection() {
		Connection conn = null;
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "student", "student");
			
			// 자동 커밋설정 안하기
			conn.setAutoCommit(false);
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		
		return conn;
	}
	
	// 열린객체 닫기
	public static void close(ResultSet rset) {
		try {
			if(rset != null && !rset.isClosed()) {
				rset.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	} 
	
	// PreparedStatement, Statement 둘다사용가능
	// 상속관계임, Statement 가 부모여서 다형성사용가능!
	public static void close(Statement stmt) {
		try {
			if(stmt != null && !stmt.isClosed()) {
				stmt.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	} 
	
	public static void close(Connection conn) {
		try {
			if(conn != null && !conn.isClosed()) {
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	} 
	
	// 커밋/롤백
	public static void commit(Connection conn) {
		try {
			if(conn != null && !conn.isClosed()) {
				conn.commit();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public static void rollback(Connection conn) {
		try {
			if(conn != null && !conn.isClosed()) {
				conn.rollback();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

 

BookView.class

package book.view;

import java.util.List;

import book.model.vo.Book;

public class BookView {
	
	public void bookErrorMsg(String msg) {
		switch(msg) {
		case "insert" :
			System.out.println("도서 정보 추가 실패");
			break;
		case "delete" :
			System.out.println("도서 정보 삭제 실패");
			break;
		case "update" :
			System.out.println("도서 정보 수정 실패");
			break;
		case "bookId" :
			System.out.println("도서 검색 아이디 찾기 실패");
			break;
		default :
			System.out.println("오류를 찾을수 없음");
		}
		
		
	}
	
	public void bookSelectView(List<Book> bookList) {
		System.out.println("=== 도서 전체 목록 조회 ===");
		for(Book book : bookList) {
			System.out.println(book);
		}
	}
	
	public void bookSelectId(Book b) {
		System.out.println("=== 도서 조회 ===");
		System.out.println(b);
	}
	
	
}

 

Run.class

package book.run;

import book.view.BookMenu;

public class Run {

	public static void main(String[] args) {
		BookMenu bookMenu = new BookMenu();
		bookMenu.displayBookMenu();

	}

}

 

실행

처음실행

 

1. 도서추가

 

2. 도서정보 수정

 

3. 도서 삭제

 

4. 도서 아이디로 조회

 

5. 도서 제목으로 조회

6. 도서 정보 전체 조회

 

9. 끝내기

'프로그래밍 > JAVA' 카테고리의 다른 글

자바스크립트 - 함수(function)  (0) 2021.07.27
JAVA - Oracle JDBC(회원관리프로그램) 예제  (1) 2021.07.14
JAVA - Oracle JDBC 간단 예제  (0) 2021.07.12
JAVA - Oracle JDBC  (0) 2021.07.12
JAVA - Oracle JDBC 다운, 적용  (0) 2021.07.12
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유