도서정보를 저장하는 테이블
도서번호, 책제목, 저자, 출판사, 가격
Class: BookDAO
Method: select, update, delete, insert → 공통 사용 Connection
Data Access Object
CREATE TABLE tbl_book(
bno NUMBER(3) PRIMARY KEY,
title VARCHAR2(20),
author VARCHAR2(20),
publisher VARCHAR2(20),
price NUMBER(6));
DESC tbl_book;
package JDBC_BOOK;
import lombok.Data;
@Data
public class Book {
String bno;
String title;
String author;
String publisher;
int price;
}
package JDBC_BOOK;
import java.sql.Connection;
import java.sql.DriverManager;
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 java.util.Scanner;
public class BookDAO {
private Connection conn;
public Scanner sc = new Scanner(System.in);
// 생성될 때 DB 접속
public BookDAO() throws ClassNotFoundException, SQLException {
String url="jdbc:oracle:thin:@localhost:1521:testdb";
String user="green";
String password="1234";
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, user, password);
System.out.println("DB 연결");
}
// 도서정보 입력
public void insert() throws SQLException {
String bno;
String title;
String author;
String publisher;
int price;
System.out.println("[안내] 도서정보 입력 페이지입니다.");
System.out.print("도서번호 > ");
bno=sc.next();
System.out.print("책제목 > ");
title=sc.next();
System.out.print("저자 > ");
author=sc.next();
System.out.print("출판사 > ");
publisher=sc.next();
System.out.print("가격 > ");
price=sc.nextInt();
String query = "INSERT INTO tbl_book VALUES(?,?,?,?,?)";
PreparedStatement pstmt = conn.prepareStatement(query);
pstmt.setString(1, bno);
pstmt.setString(2, title);
pstmt.setString(3, author);
pstmt.setString(4, publisher);
pstmt.setInt(5, price);
int result = pstmt.executeUpdate();
if(result == 1)
System.out.println("도서 정보 입력 완료");
else
System.out.println("입력한 정보를 다시 확인하세요");
}
// 도서정보 출력
public void select() throws SQLException {
System.out.println("[안내] 도서정보 출력 페이지입니다.");
List<Book> list = new ArrayList<>();
Statement stmt = conn.createStatement();
String query = "SELECT * FROM tbl_book";
ResultSet rs = stmt.executeQuery(query);
while(rs.next()) {
Book book = new Book();
String bno = rs.getString("bno");
String title = rs.getString("title");
String author = rs.getString("author");
String publisher = rs.getString("publisher");
int price = rs.getInt("price");
book.setBno(bno);
book.setTitle(title);
book.setAuthor(author);
book.setPublisher(publisher);
book.setPrice(price);
list.add(book);
}
for(Book b: list)
System.out.println(b);
}
// 도서정보 수정
public void update() throws SQLException {
System.out.println("[안내] 도서정보 수정 페이지입니다.");
System.out.print("몇 번 게시글을 수정하시겠습니까? > ");
String bno = sc.next();
System.out.print("책제목 > ");
String title=sc.next();
System.out.print("저자 > ");
String author=sc.next();
System.out.print("출판사 > ");
String publisher=sc.next();
System.out.print("가격 > ");
int price=sc.nextInt();
String query = "UPDATE tbl_book SET title=?, author=?, publisher=?, price=? WHERE bno=?";
PreparedStatement pstmt = conn.prepareStatement(query);
pstmt.setString(1, title);
pstmt.setString(2, author);
pstmt.setString(3, publisher);
pstmt.setInt(4, price);
pstmt.setString(5, bno);
int result = pstmt.executeUpdate();
if(result == 1)
System.out.println("도서 정보를 수정했습니다.");
else
System.out.println("도서 정보를 다시 확인하세요.");
}
// 도서정보 삭제
public void delete() throws SQLException {
System.out.println("[안내] 도서정보 삭제 페이지입니다.");
System.out.println("몇 번 도서정보를 삭제하시겠습니까?");
int bno = sc.nextInt();
String query = "DELETE FROM tbl_book WHERE bno=?";
PreparedStatement pstmt = conn.prepareStatement(query);
pstmt.setInt(1, bno);
int result = pstmt.executeUpdate();
if (result == 1)
System.out.println("도서 정보를 삭제했습니다.");
else
System.out.println("도서 정보 삭제를 실패했습니다.");
}
}
package JDBC_BOOK;
import java.sql.SQLException;
public class BookTest {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
BookDAO bdao = new BookDAO();
bdao.insert();
bdao.select();
bdao.update();
bdao.delete();
}
}
package JDBC_BOOK;
import lombok.Data;
@Data
public class Book {
String bno;
String title;
String author;
String publisher;
int price;
public Book() {}
public Book(String bno, String title, String author, String publisher, int price) {
this.bno = bno;
this.title = title;
this.author = author;
this.publisher = publisher;
this.price = price;
}
}
package JDBC_BOOK;
import java.sql.Connection;
import java.sql.DriverManager;
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 java.util.Scanner;
public class BookDAO {
private Connection conn;
public Scanner sc = new Scanner(System.in);
// 생성될 때 DB 접속
public BookDAO() throws ClassNotFoundException, SQLException {
String url="jdbc:oracle:thin:@localhost:1521:testdb";
String user="green";
String password="1234";
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, user, password);
System.out.println("DB 연결");
}
// 도서정보 입력
public boolean insert(Book b) {
String bno = b.getBno();
String title = b.getTitle();
String author = b.getAuthor();
String publisher = b.getPublisher();
int price = b.getPrice();
String query = "INSERT INTO tbl_book VALUES(?,?,?,?,?)";
try(PreparedStatement pstmt = conn.prepareStatement(query)) {
pstmt.setString(1, bno);
pstmt.setString(2, title);
pstmt.setString(3, author);
pstmt.setString(4, publisher);
pstmt.setInt(5, price);
int result = pstmt.executeUpdate();
if(result == 1)
return true;
else
return false;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
// 도서정보 출력
public List<Book> select(){
System.out.println("[안내] 도서정보 출력 페이지입니다.");
List<Book> list = new ArrayList<>();
Statement stmt;
try {
stmt = conn.createStatement();
String query = "SELECT * FROM tbl_book";
ResultSet rs = stmt.executeQuery(query);
while(rs.next()) {
Book book = new Book();
String bno = rs.getString("bno");
String title = rs.getString("title");
String author = rs.getString("author");
String publisher = rs.getString("publisher");
int price = rs.getInt("price");
book.setBno(bno);
book.setTitle(title);
book.setAuthor(author);
book.setPublisher(publisher);
book.setPrice(price);
list.add(book);
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
// 도서정보 수정
public boolean update(String bno, String title, String author, String publisher, int price){
String query = "UPDATE tbl_book SET title=?, author=?, publisher=?, price=? WHERE bno=?";
try(PreparedStatement pstmt = conn.prepareStatement(query)) {
pstmt.setString(1, title);
pstmt.setString(2, author);
pstmt.setString(3, publisher);
pstmt.setInt(4, price);
pstmt.setString(5, bno);
int result = pstmt.executeUpdate();
if(result == 1)
return true;
else
return false;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
// 도서정보 삭제
public boolean delete(int no){
String query = "DELETE FROM tbl_book WHERE bno=?";
try(PreparedStatement pstmt=conn.prepareStatement(query)) {
pstmt.setInt(1, no);
int result = pstmt.executeUpdate();
if (result == 1)
return true;
else
return false;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
}
package JDBC_BOOK;
import java.sql.SQLException;
import java.util.List;
import java.util.Scanner;
public class BookTest {
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) throws ClassNotFoundException, SQLException {
BookDAO bdao = new BookDAO();
while(true) {
System.out.print("[메뉴] 입력:1, 출력:2, 수정:3, 삭제:4 > ");
int n = sc.nextInt();
switch(n) {
case 1: insert_book(bdao); break;
case 2: select_book(bdao); break;
case 3: update_book(bdao); break;
case 4: delete_book(bdao); break;
default: System.out.println("메뉴 선택을 다시 해주시기 바랍니다."); break;
}
System.out.println();
}
}
// 도서정보 입력
public static void insert_book(BookDAO bdao) {
System.out.println("[안내] 도서정보 입력 페이지입니다.");
System.out.print("도서번호 > ");
String bno=sc.next();
System.out.print("책제목 > ");
String title=sc.next();
System.out.print("저자 > ");
String author=sc.next();
System.out.print("출판사 > ");
String publisher=sc.next();
System.out.print("가격 > ");
int price=sc.nextInt();
Book b = new Book(bno, title, author, publisher, price);
if(bdao.insert(b))
System.out.println("도서 정보 입력 완료");
else
System.out.println("입력한 정보를 다시 확인하세요");
}
// 도서정보 출력
public static void select_book(BookDAO bdao) {
List<Book> list = bdao.select();
for(Book book:list)
System.out.println(book);
}
// 도서정보 수정
public static void update_book(BookDAO bdao) {
System.out.println("[안내] 도서정보 수정 페이지입니다.");
System.out.print("몇 번 게시글을 수정하시겠습니까? > ");
String bno = sc.next();
System.out.print("책제목 > ");
String title=sc.next();
System.out.print("저자 > ");
String author=sc.next();
System.out.print("출판사 > ");
String publisher=sc.next();
System.out.print("가격 > ");
int price=sc.nextInt();
if(bdao.update(bno, title, author, publisher, price))
System.out.println("도서 정보를 수정했습니다.");
else
System.out.println("도서 정보를 다시 확인하세요");
}
// 도서정보 삭제
public static void delete_book(BookDAO bdao) {
System.out.println("[안내] 도서정보 삭제 페이지입니다.");
System.out.println("몇 번 도서정보를 삭제하시겠습니까?");
int no = sc.nextInt();
if(bdao.delete(no))
System.out.println("도서 정보를 삭제했습니다.");
else
System.out.println("도서 정보 삭제를 실패했습니다.");
}
}
package JDBC_BOOK;
import java.sql.Connection;
import java.sql.DriverManager;
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 java.util.Scanner;
public class MemberDAO {
private Connection conn;
public Scanner sc = new Scanner(System.in);
// 생성될 때 DB 접속
public MemberDAO() throws ClassNotFoundException, SQLException {
String url="jdbc:oracle:thin:@localhost:1521:testdb";
String user="green";
String password="1234";
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, user, password);
// System.out.println("DB 연결");
}
// 회원 가입
public boolean insert(Member m) {
String id = m.getId();
String pw = m.getPw();
String name = m.getName();
String phone = m.getPhone();
char grade = m.getGrade();
String query = "INSERT INTO tbl_member VALUES(?,?,?,?,?)";
try(PreparedStatement pstmt = conn.prepareStatement(query)) {
pstmt.setString(1, id);
pstmt.setString(2, pw);
pstmt.setString(3, name);
pstmt.setString(4, phone);
pstmt.setInt(5, grade);
int result = pstmt.executeUpdate();
if(result == 1)
return true;
else
return false;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
// 회원 정보 출력
public List<Member> select(){
List<Member> list = new ArrayList<>();
Statement stmt;
try {
stmt = conn.createStatement();
String query = "SELECT * FROM tbl_member";
ResultSet rs = stmt.executeQuery(query);
while(rs.next()) {
String id = rs.getString("id");
String pw = rs.getString("id");
String name = rs.getString("id");
String phone = rs.getString("id");
String gradeTemp = rs.getString("grade");
char grade = gradeTemp.charAt(0);
Member member = new Member(id, pw, name, phone, grade);
list.add(member);
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
// 회원 정보 수정
public boolean update(String id, String pw, String name, String phone, char grade){
String gradeTemp = String.valueOf(grade);
String query = "UPDATE tbl_member SET name=?, phone=?, grade=? WHERE id=? AND pw=?";
try(PreparedStatement pstmt = conn.prepareStatement(query)) {
pstmt.setString(1, name);
pstmt.setString(2, phone);
pstmt.setString(3, gradeTemp);
pstmt.setString(4, id);
pstmt.setString(5, pw);
int result = pstmt.executeUpdate();
if(result == 1)
return true;
else
return false;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
// 회원 정보 삭제
public boolean delete(String id, String pw){
String query = "DELETE FROM tbl_member WHERE id=? AND pw=?";
try(PreparedStatement pstmt=conn.prepareStatement(query)) {
pstmt.setString(1, id);
pstmt.setString(2, pw);
int result = pstmt.executeUpdate();
if (result == 1)
return true;
else
return false;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
}
package JDBC_BOOK;
import lombok.Data;
@Data
public class Member {
String id;
String pw;
String name;
String phone;
char grade;
public Member() {}
public Member(String id, String pw, String name, String phone, char grade) {
this.id = id;
this.pw = pw;
this.name = name;
this.phone = phone;
this.grade = grade;
}
}
package JDBC_BOOK;
import java.sql.SQLException;
import java.util.List;
import java.util.Scanner;
public class BookTest {
static Scanner sc = new Scanner(System.in);
static Member currentUser = null;
public static void main(String[] args) throws ClassNotFoundException, SQLException {
BookDAO bdao = new BookDAO();
MemberDAO mdao = new MemberDAO();
choiceMenu(bdao, mdao);
}
// 로그인&관리자 여부에 따라 메뉴 별도 선택
public static void choiceMenu(BookDAO bdao, MemberDAO mdao) {
boolean flag=true;
while(flag) {
printMenu();
int n = sc.nextInt();
if(isManager()) {
switch(n) {
case 0: {
if(currentUser==null)
login(mdao);
else
logout();
break;
}
case 1: select_book(bdao); break;
case 2: insert_book(bdao); break;
case 3: update_book(bdao); break;
case 4: delete_book(bdao); break;
case 9: System.out.println("종료합니다."); flag=false; break;
default: System.out.println("메뉴 선택을 다시 해주시기 바랍니다."); break;
}
System.out.println();
}
else {
switch(n) {
case 0: {
if(currentUser==null)
login(mdao);
else
logout();
break;
}
case 1: select_book(bdao); break;
case 9: System.out.println("종료합니다."); flag=false; break;
default: System.out.println("메뉴 선택을 다시 해주시기 바랍니다."); break;
}
System.out.println();
}
}
}
// 로그인&관리자 여부에 따라 메뉴 별도 출력
public static void printMenu() {
System.out.println("======= 메 뉴 ======");
if(currentUser==null)
System.out.println("0. 로그인");
else
System.out.println("0. 로그아웃");
System.out.println("1. 도서정보 출력");
if(isManager())
System.out.println("2. 도서정보 입력\n3. 도서정보 수정\n4. 도서정보 삭제");
System.out.println("9. 프로그램 종료");
System.out.println("====================");
System.out.print("메뉴 선택 > ");
}
// 로그인한 사람이 관리자인지?
public static boolean isManager() {
boolean flag = false;
if(currentUser != null && currentUser.getGrade() == 'A')
flag = true;
return flag;
}
// 로그인
public static void login(MemberDAO mdao) {
boolean flag=false;
System.out.print("id > ");
String id = sc.next();
System.out.print("pw > ");
String pw = sc.next();
List<Member> list = mdao.select();
for(Member m:list) {
if(id.equals(m.getId()) && pw.equals(m.getPw())) {
flag=true;
currentUser=m; // 현재 로그인한 사람?
System.out.println(currentUser.getId()+"님 로그인 성공");
break;
}
}
if(!flag) System.out.println("로그인 정보를 다시 확인하세요.");
}
// 로그아웃
public static void logout() {
currentUser=null;
}
// 도서정보 입력
public static void insert_book(BookDAO bdao) {
System.out.println("[안내] 도서정보 입력 페이지입니다.");
System.out.print("도서번호 > ");
String bno=sc.next();
System.out.print("책제목 > ");
String title=sc.next();
System.out.print("저자 > ");
String author=sc.next();
System.out.print("출판사 > ");
String publisher=sc.next();
System.out.print("가격 > ");
int price=sc.nextInt();
Book b = new Book(bno, title, author, publisher, price);
if(bdao.insert(b))
System.out.println("도서 정보 입력 완료");
else
System.out.println("입력한 정보를 다시 확인하세요");
}
// 도서정보 출력
public static void select_book(BookDAO bdao) {
List<Book> list = bdao.select();
for(Book book:list)
System.out.println(book);
}
// 도서정보 수정
public static void update_book(BookDAO bdao) {
System.out.println("[안내] 도서정보 수정 페이지입니다.");
System.out.print("몇 번 게시글을 수정하시겠습니까? > ");
String bno = sc.next();
System.out.print("책제목 > ");
String title=sc.next();
System.out.print("저자 > ");
String author=sc.next();
System.out.print("출판사 > ");
String publisher=sc.next();
System.out.print("가격 > ");
int price=sc.nextInt();
if(bdao.update(bno, title, author, publisher, price))
System.out.println("도서 정보를 수정했습니다.");
else
System.out.println("도서 정보를 다시 확인하세요");
}
// 도서정보 삭제
public static void delete_book(BookDAO bdao) {
System.out.println("[안내] 도서정보 삭제 페이지입니다.");
System.out.println("몇 번 도서정보를 삭제하시겠습니까?");
int no = sc.nextInt();
if(bdao.delete(no))
System.out.println("도서 정보를 삭제했습니다.");
else
System.out.println("도서 정보 삭제를 실패했습니다.");
}
}
======= 메 뉴 ======
0. 로그인
1. 도서정보 출력
9. 프로그램 종료
====================
메뉴 선택 > 0
id > aaa
pw > aaa
aaa님 로그인 성공
======= 메 뉴 ======
0. 로그아웃
1. 도서정보 출력
2. 도서정보 입력
3. 도서정보 수정
4. 도서정보 삭제
9. 프로그램 종료
====================
메뉴 선택 > 1
[안내] 도서정보 출력 페이지입니다.
Book(bno=1, title=자바스크립트, author=제로초, publisher=길벗, price=12000)
Book(bno=2, title=깃&깃허브, author=한재원, publisher=위키북스, price=18000)
======= 메 뉴 ======
0. 로그아웃
1. 도서정보 출력
2. 도서정보 입력
3. 도서정보 수정
4. 도서정보 삭제
9. 프로그램 종료
====================
메뉴 선택 > 3
[안내] 도서정보 수정 페이지입니다.
몇 번 게시글을 수정하시겠습니까? > 2
책제목 > 깃&깃허브
저자 > 한재원
출판사 > 위키북스
가격 > 16000
도서 정보를 수정했습니다.
======= 메 뉴 ======
0. 로그아웃
1. 도서정보 출력
2. 도서정보 입력
3. 도서정보 수정
4. 도서정보 삭제
9. 프로그램 종료
====================
메뉴 선택 > 1
[안내] 도서정보 출력 페이지입니다.
Book(bno=1, title=자바스크립트, author=제로초, publisher=길벗, price=12000)
Book(bno=2, title=깃&깃허브, author=한재원, publisher=위키북스, price=16000)
======= 메 뉴 ======
0. 로그아웃
1. 도서정보 출력
2. 도서정보 입력
3. 도서정보 수정
4. 도서정보 삭제
9. 프로그램 종료
====================
메뉴 선택 > 0
======= 메 뉴 ======
0. 로그인
1. 도서정보 출력
9. 프로그램 종료
====================
메뉴 선택 > 0
id > bbb
pw > bbb
bbb님 로그인 성공
======= 메 뉴 ======
0. 로그아웃
1. 도서정보 출력
9. 프로그램 종료
====================
메뉴 선택 > 1
[안내] 도서정보 출력 페이지입니다.
Book(bno=1, title=자바스크립트, author=제로초, publisher=길벗, price=12000)
Book(bno=2, title=깃&깃허브, author=한재원, publisher=위키북스, price=16000)
======= 메 뉴 ======
0. 로그아웃
1. 도서정보 출력
9. 프로그램 종료
====================
메뉴 선택 > 0
======= 메 뉴 ======
0. 로그인
1. 도서정보 출력
9. 프로그램 종료
====================
메뉴 선택 > 9
종료합니다.
======= 메 뉴 ======
0. 로그인
1. 회원가입
9. 프로그램 종료
====================
메뉴 선택 > 0
id > aaa
pw > aaa
aaa님 로그인 성공
======= 메 뉴 ======
0. 로그아웃
1. 도서정보 출력
2. 도서정보 입력
3. 도서정보 수정
4. 도서정보 삭제
9. 프로그램 종료
====================
메뉴 선택 > 1
[출력방식] 전체출력:1, 부분출력:2, 검색출력:3
3
[검색항목] 도서제목:1, 작가명:2, 출판사:3 > 1
도서제목 검색 > 허브
Book(bno=2, title=깃&깃허브, author=한재원, publisher=위키북스, price=16000)
======= 메 뉴 ======
0. 로그아웃
1. 도서정보 출력
2. 도서정보 입력
3. 도서정보 수정
4. 도서정보 삭제
9. 프로그램 종료
====================
메뉴 선택 > 1
[출력방식] 전체출력:1, 부분출력:2, 검색출력:3
3
[검색항목] 도서제목:1, 작가명:2, 출판사:3 > 2
작가명 검색 > 허브
해당 도서 정보가 없습니다.
======= 메 뉴 ======
0. 로그아웃
1. 도서정보 출력
2. 도서정보 입력
3. 도서정보 수정
4. 도서정보 삭제
9. 프로그램 종료
====================
메뉴 선택 > 9
종료합니다.