자바에서 오라클에 접근하기
1.오라클에서 제공하는 라이브러리(클래스를 모아놓은 것) 설치-빌드패스
** 중요한 이론:
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;
}
}