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
반응형
'순이코딩 > Java' 카테고리의 다른 글
[Java] try-catch문을 이용한 예외처리, finally문 (0) | 2023.07.13 |
---|---|
[Java] JDBC 2(MVC를 활용) (0) | 2023.07.12 |
[Java]JDBC(Java DateBase Connectivity) (0) | 2023.07.12 |
[Java] 상속 - 부모/자식 클래스, 추상 클래스 (0) | 2023.07.12 |
[Java] mp3player 프로그램 만들기 (0) | 2023.07.11 |