휴먼교육센터 개발자과정 44일차

조하영·2022년 10월 6일
0

자바에서 오라클에 접근하기

1.오라클에서 제공하는 라이브러리(클래스를 모아놓은 것) 설치-빌드패스

  1. 실제 작성할때 순서
    2.1 드라이버 로딩(필요한 클래스를 자바로 로드)
    2.2 연결요청(자바에서 DB로 요청, 필요할때만 요청)
    2.3 쿼리를 전송
    2.4 결과값을 받는다.
    2.5 자원을 반납한다.(다른 객체나 프로그램에서도 사용해야 하기 때문)

** 중요한 이론:
DBMS에서는 외부에서 자원을 공유하도록 한다.
공유 할때마다 공유에 필요한 자원을 할당해 준다.(은행창구로 비유할 수 있음)
만약 자원을 필요로 하는 프로그램이 100개라면 필요한 자원도 100개이다.
이렇게 무한대로 자원을 허락한다면 DBMS는 자원의 처리보다
연결을 관리하는데 더 많은 자원이 필요하게 된다. 이는 성능저하의 원인이 된다.

그래서 이를 방지하기 위해
1. 자원을 할당 받은후 자원을 반납
2. 별도로 자원을 할당하는 객체를 만들고 그 객체에서
미리 5개 정도의 연결자원을 확보한 후 필요한 객체에 공유하도록 한다.
Database connection pull(DBCP)이라고 한다.

기존 영어단어장 만들기 해쉬맵을 DAO, DTO로 변환

단어장관리 클래스

package word;

import java.util.HashMap;
import java.util.Scanner;

import DAO_DTO.WordMean_DAO;
import DAO_DTO.WordMean_DTO;

public class WordManager {
    WordMean_DAO wdao = new WordMean_DAO();
    WordMean_DTO wdto = new WordMean_DTO();
    Scanner in = new Scanner(System.in);
    // private HashMap<String, WordMean> word = null;

    public WordManager(HashMap<String, WordMean> word) {
        // this.word = word;
        for (;;) {
            menu();
            System.out.println("메뉴를 선택해주세요 ");
            String selMenu = in.nextLine();
            if (selMenu.equals("1")) {
                addWord();
            } else if (selMenu.equals("2")) {
                delWord();
//			} else if (selMenu.equals("3")) {
//				searchWord();
            } else if (selMenu.equals("4")) {
                modWord();
//			} else if (selMenu.equals("5")) {
//				showWord();
            } else if (selMenu.equals("6")) {
                allDelWord();
            } else if (selMenu.equals("7")) {
                break;
            } else {
                System.out.println("잘못된 입력입니다.");
            }
        }
    }

    private void modWord() {
        System.out.println("수정할 영단어를 입력해주세요. ");
        String modWord = in.nextLine();
//
//		if (word.get(modWord) != null) {
        System.out.println("수정할 뜻을 입력해주세요. ");
        String modMean = in.nextLine();
        System.out.println("중요도를 상/중/하로 입력하세요. ");
        String imp = in.nextLine();
        System.out.println("코멘트를 작성하세요. ");
        String comment = in.nextLine();
        if (imp.equals("상") || imp.equals("중") || imp.equals("하")) {
            wdto.setEng(modWord);
            wdto.setMean(modMean);
            wdto.setImp(imp);
            wdto.setComment(comment);

            wdao.modyWord(wdto);
            System.out.println(modWord + "(이/가) 수정되었습니다. ");
        } else {
            System.out.println("잘못된 입력입니다.");
        }
//		} else {
//			System.out.println(modWord + " 단어가 없습니다. ");
//		}
    }

//
    private void allDelWord() {
        System.out.println("정말로 삭제하시겠습니까?(Y/N)");
        String yn = in.nextLine();
        yn.toLowerCase();
        if (yn.equals("y")) {
            wdao.allDeleteWord();
            System.out.println("모든 단어가 삭제되었습니다.");
        } else {
            System.out.println("이전 메뉴로 돌아갑니다. ");
        }
    }

//
//	private void showWord() {
//		System.out.println("등록된 단어의 갯수는 " + word.size() + "개 입니다.");
//		for (String i : word.keySet()) {
//			System.out.println(
//					i + ": " + word.get(i).getMean() + " (" + word.get(i).getImp() + ")" + word.get(i).getComment());
//		}
//	}
//
//	private void searchWord() {
//
//		for (;;) {
//			System.out.println("1. 영단어로 검색 ");
//			System.out.println("2. 뜻으로 검색 ");
//			System.out.println("3. 중요도로 검색 ");
//			System.out.println("4. 이전메뉴 ");
//			System.out.println("메뉴를 선택해주세요 ");
//			String selMenu = in.nextLine();
//			if (selMenu.equals("1")) {
//				searchEnWord();
//			} else if (selMenu.equals("2")) {
//				serchMeanWord();
//			} else if (selMenu.equals("3")) {
//				serchImpWord();
//			} else if (selMenu.equals("4")) {
//				break;
//			} else {
//				System.out.println("잘못된 입력입니다.");
//			}
//		}
//	}
//
//	private void serchImpWord() {
//		System.out.println("검색할 영단어의 중요도를 상/중/하로 입력해주세요 ");
//		String searchImp = in.nextLine();
//		boolean flag = true;
//		for (Entry<String, WordMean> entry : word.entrySet()) {
//			if (entry.getValue().getImp().equals(searchImp)) {
//				System.out.println(entry.getKey() + ": " + entry.getValue().getMean() + " (" + entry.getValue().getImp()
//						+ ")" + entry.getValue().getComment());
//				flag = false;
//			}
//		}
//		if (flag) {
//			System.out.println("중요도 " + searchImp + "(은/는) 없습니다. ");
//		}
//	}
//
//	private void serchMeanWord() {
//		System.out.println("검색할 영단어의 뜻을 입력해주세요 ");
//		String searchMean = in.nextLine();
//		boolean flag = true;
//		for (Entry<String, WordMean> entry : word.entrySet()) {
//			if (searchMean.equals(entry.getValue().getMean())) {
//				System.out.println(entry.getKey() + ": " + entry.getValue().getMean() + " (" + entry.getValue().getImp()
//						+ ")" + entry.getValue().getComment());
//				flag = false;
//			}
//		}
//		if (flag) {
//			System.out.println(searchMean + "의 뜻을 가진 단어가 없습니다. ");
//		}
//	}
//
//	private void searchEnWord() {
//		System.out.println("검색할 영단어를 입력해주세요 ");
//		String searchEn = in.nextLine();
//		boolean flag = true;
//		for (Entry<String, WordMean> entry : word.entrySet()) {
//			if (searchEn.equals(entry.getKey())) {
//				System.out.println(entry.getKey() + ": " + entry.getValue().getMean() + " (" + entry.getValue().getImp()
//						+ ")" + entry.getValue().getComment());
//				flag = false;
//			}
//		}
//		if (flag) {
//			System.out.println(searchEn + " 단어가 없습니다. ");
//		}
//	}
//
    private void delWord() {
        System.out.println("삭제할 영단어를 입력하세요. ");
        String delWord = in.nextLine();
        wdto.setEng(delWord);
        wdao.deleteWord(wdto);
        System.out.println(delWord + "(이/가) 삭제되었습니다. ");

//		if (word.get(delWord) != null) {
//			word.remove(delWord);
//			System.out.println(delWord + "(이/가) 삭제되었습니다.  ");
//		} else {
//			System.out.println(delWord + " 단어가 없습니다. ");
//		}
    }

    private void addWord() {
        // WordMean newWordMean = new WordMean();
        System.out.println("추가할 영단어를 입력하새요 ");
        String newWord = in.nextLine();
        // boolean flag = true;
//		for (Entry<String, WordMean> entry : word.entrySet()) {
//			if (newWord.equals(entry.getKey())) {
//				System.out.println(entry.getKey() + "단어가 이미 있습니다.  ");
//				flag = false;
//			}
//		}
//		if (flag) {
        System.out.println("영단어의 뜻을 입력하세요. ");
        String wordMean = in.nextLine();
        System.out.println("중요도를 상/중/하로 입력하세요. ");
        String imp = in.nextLine();
        System.out.println("코멘트를 작성하세요. ");
        String comment = in.nextLine();
        if (imp.equals("상") || imp.equals("중") || imp.equals("하")) {
            wdto.setEng(newWord);
            wdto.setMean(wordMean);
            wdto.setImp(imp);
            wdto.setComment(comment);

            wdao.insertWord(wdto);
            System.out.println(newWord + "(이/가) 추가되었습니다.");
        } else {
            System.out.println("잘못된 입력입니다.");
        }
//		}
    }

    private void menu() {
        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("7. 이전메뉴 ");
    }
}

DAO 클래스

package DAO_DTO;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class WordMean_DAO {
    private Connection conn = null;

    public WordMean_DAO(){
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public boolean connect() {
        try {
            conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "system", "11111111");
            return true;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;
        }
    }

    public void insertWord(WordMean_DTO wdto) {
        if(connect()) {
            String sql = "insert into word1 values(?,?,?,?,default)";
            try {
                PreparedStatement psmt = conn.prepareStatement(sql);
                psmt.setString(1, wdto.getEng());
                psmt.setString(2, wdto.getMean());
                psmt.setString(3, wdto.getImp());
                psmt.setString(4, wdto.getComment());
                psmt.executeUpdate();
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }else {
            System.out.println("연결실패");
        }
    }

    public void deleteWord(WordMean_DTO wdto) {
        if(connect()) {
            String sql = "delete from word1 where eng=?";
            try {
                PreparedStatement psmt = conn.prepareStatement(sql);
                psmt.setString(1, wdto.getEng());
                psmt.executeUpdate();
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }else {
            System.out.println("연결실패");
        }
    }

    public void modyWord(WordMean_DTO wdto) {
        if(connect()) {
            String sql = "update word1 set kor=?, imp=?, comm=? where eng=?";
            try {
                PreparedStatement psmt = conn.prepareStatement(sql);
                psmt.setString(1, wdto.getMean());
                psmt.setString(2, wdto.getImp());
                psmt.setString(3, wdto.getComment());
                psmt.setString(4, wdto.getEng());
                psmt.executeUpdate();
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }else {
            System.out.println("연결실패");
        }
    }

    public void allDeleteWord() {
        if(connect()) {
            String sql = "truncate table word1";
            try {
                PreparedStatement psmt = conn.prepareStatement(sql);
                psmt.executeUpdate();
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }else {
            System.out.println("연결실패");
        }
    }

}

DTO클래스

package DAO_DTO;

public class WordMean_DTO {
    private String eng = null;
    private String mean = null;
    private String imp = null;
    private String comment = null;

    public String getEng() {
        return eng;
    }
    public void setEng(String eng) {
        this.eng = eng;
    }
    public String getMean() {
        return mean;
    }
    public void setMean(String mean) {
        this.mean = mean;
    }
    public String getImp() {
        return imp;
    }
    public void setImp(String imp) {
        this.imp = imp;
    }
    public String getComment() {
        return comment;
    }
    public void setComment(String comment) {
        this.comment = comment;
    }
}
profile
공부하는 개발자

0개의 댓글