오늘이라도
[Java]42. JDBC 복습 본문
반응형
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
반응형
'취업성공패키지 SW 개발자 교육 > Java' 카테고리의 다른 글
41. JDBC ⑤ : 문제. 검색 메서드 추가하기 (0) | 2020.04.20 |
---|---|
40. JDBC ④ : 문제 답안, JDBC 연동하여 회원 관리 메뉴 만들기 (0) | 2020.04.17 |
39. JDBC ③ : PreparedStatement와 DAO, DTO 연동, 삽입, 삭제, 갱신, 검색 (0) | 2020.04.16 |
38. JDBC ② (0) | 2020.04.14 |
37. JDBC ① (0) | 2020.04.14 |