도서관리 프로그램
도서관리 프로그램 을 만들어볼려고한다.
사용에 필요한 오라클 은 아래와같다.
기능
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 |