--------------------------------------
직원 관리
- JDBC 프로그램 작성은 아래 순서를 따른다.
기능 구현 분석 > 화면 구성 > 데이터베이스(샘플 쿼리) 준비 > 클래스 구성 분석 > 액션 코드 작성 > 테스트

5. 소스 코드

 

//MenuAction.java -> 메뉴 액션 클래스. 콘솔 액션.
package com.test;

import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.*;

public class MenuAction {
 
 private InsaDAO dao;
 
 public MenuAction() {
  dao = new InsaDAO();
 }
 
 //1. 직원 입력
 public void menu1(Scanner sc) {
 
  System.out.println("직원 정보 입력 --------------");
  System.out.println("(입력하는 과정에서 x 입력시 입력 중단)");
 
  //이름 입력 받는 부분
  String name;
  do {
   try {
    System.out.print("이름(20자 이내)?");
    name = sc.next();
    if (name.equalsIgnoreCase("x")) {
     System.out.println("입력 취소!");
     return;
    }
    if (name.length() > 20) {
     throw new Exception("20자 초과!");
    }
   
    break;
   
   }catch(Exception e){
    System.out.println(e.getMessage());
    //System.out.println();
   }
  }while(true);
 
  //주민번호 입력 받는 부분
  String ssn;
  do {
   try {
    System.out.print("주민번호(YYMMDD-NNNNNNN)?");
    ssn = sc.next();
    if (ssn.equalsIgnoreCase("x")) {
     System.out.println("입력 취소!");
     return;
    }
    if (!patternCheck("\\d{6}-\\d{7}", ssn)) {
     throw new Exception("주민번호(YYMMDD-NNNNNNN) 형식이 아닙니다!");
    }
   
    break;
   
   }catch(Exception e){
    System.out.println(e.getMessage());
    //System.out.println();
   }
  }while(true);
 
  //입사일 입력 받는 부분
  String ibsadate;
  do {
   try {
    System.out.print("입사일(YYYY-MM-DD)?");
    ibsadate = sc.next();
    if (ibsadate.equalsIgnoreCase("x")) {
     System.out.println("입력 취소!");
     return;
    }
    if (!dateCheck(ibsadate)) {
     throw new Exception("입사일(YYYY-MM-DD) 형식이 아닙니다!");
    }
   
    break;
   
   }catch(Exception e){
    System.out.println(e.getMessage());
    //System.out.println();
   }
  }while(true); 
 
 
  //전화번호 입력 받는 부분
  String tel;
  do {
   try {
    System.out.print("전화번호(010-XXXX-XXXX)?");
    tel = sc.next();
    if (tel.equalsIgnoreCase("x")) {
     System.out.println("입력 취소!");
     return;
    }
    if (!patternCheck("010-\\d{4}-\\d{4}", tel)) {
     throw new Exception("전화번호(010-XXXX-XXXX) 형식이 아닙니다!");
    }
   
    break;
   
   }catch(Exception e){
    System.out.println(e.getMessage());
    //System.out.println();
   }
  }while(true); 
 
 
  //지역번호 입력 받는 부분
  String cid;
  do {
   try {
    String cityList = cityList();
    System.out.printf("지역번호 종류(%s)%n", cityList);
    System.out.print("지역번호?");
    cid = sc.next();
    if (cid.equalsIgnoreCase("x")) {
     System.out.println("입력 취소!");
     return;
    }
    if (!cityList.contains(cid)) {
     throw new Exception("지역번호 범위가 아닙니다!");
    }
   
    break;
   
   }catch(Exception e){
    System.out.println(e.getMessage());
    //System.out.println();
   }
  }while(true);
 
 
  //부서번호 입력 받는 부분
  String bid;
  do {
   try {
    String buseoList = buseoList();
    System.out.printf("부서번호 종류(%s)%n", buseoList);
    System.out.print("부서번호?");
    bid = sc.next();
    if (bid.equalsIgnoreCase("x")) {
     System.out.println("입력 취소!");
     return;
    }
    if (!buseoList.contains(bid)) {
     throw new Exception("부서번호 범위가 아닙니다!");
    }
   
    break;
   
   }catch(Exception e){
    System.out.println(e.getMessage());
    //System.out.println();
   }
  }while(true);  
 
  //직위번호 입력 받는 부분
  String jid;
  do {
   try {
    String jikwiList = jikwiList();
    System.out.printf("직위번호 종류(%s)%n", jikwiList);
    System.out.print("직위번호?");
    jid = sc.next();
    if (jid.equalsIgnoreCase("x")) {
     System.out.println("입력 취소!");
     return;
    }
    if (!jikwiList.contains(jid)) {
     throw new Exception("직위번호 범위가 아닙니다!");
    }
   
    break;
   
   }catch(Exception e){
    System.out.println(e.getMessage());
    //System.out.println();
   }
  }while(true);  

  //기본급 입력 받는 부분
  String basicpay;
  // 해당항목만 다시 입력 가능하게 만듬.
  do {
   try {
    int minBasicpay = dao.getMinBasicPay(jid);
    System.out.printf("기본급(최소 %d원 이상)?", minBasicpay);
    basicpay = sc.next();
    if (basicpay.equalsIgnoreCase("x")) {
     System.out.println("입력취소!");
     return;
    }
    if (Integer.parseInt(basicpay) < minBasicpay) {
     throw new Exception(String.format("최소 %d원 이상이어야 합니다.", minBasicpay));

    }

    break;
   
   } catch (Exception e) {
    System.out.println(e.getMessage());
    System.out.println();
   }
  } while (true);
 
  //수당 입력 받는 부분
  String sudang;
  do {
   try {
    System.out.print("수당? ");
    sudang = sc.next();
    if (sudang.equalsIgnoreCase("x")) {
     System.out.println("입력취소!");
     return;
    }

    break;
   
   } catch (Exception e) {
    System.out.println(e.getMessage());
    System.out.println();
   }
  } while (true); 
 
  //데이터베이스 자료 저장 액션
  Insa insa = new Insa();
  insa.setName(name);
  insa.setSsn(ssn);
  insa.setIbsadate(ibsadate);
  insa.setTel(tel);
  insa.setCid(cid);
  insa.setBid(bid);
  insa.setJid(jid);
  insa.setBasicPay(Integer.parseInt(basicpay));
  insa.setSudang(Integer.parseInt(sudang));
  int result = dao.add(insa);
  System.out.printf("%d개의 행이 삽입 되었습니다.", result);
 
 }
 
 //2. 직원 전체 출력
 public void menu2(Scanner sc) {
  //서브메뉴 임시 테스트
  //subMenu2("num");
 
  //서브메뉴
  do {
   //문제)
   //서브메뉴 종류 출력
   //서브메뉴 선택
  
   //서브메뉴별로 정렬 기준 제시
   //->private 메소드 호출
   //예를 들어,
   //case "1": subMenu2("num"); break;
   //case "2": subMenu2("name"); break;
   System.out.println("직원 전체 출력(서브 메뉴)-------------");
   System.out.println("1. 사번 정렬");
   System.out.println("2. 이름 정렬");
   System.out.println("3. 지역 정렬");
   System.out.println("4. 부서 정렬");
   System.out.println("5. 직위 정렬");
   System.out.print("선택(1~5, x 종료)?");
   String m = sc.next();
   if (m.equalsIgnoreCase("x")) {
    break;
   }
  
   switch (m) {
   case "1": subMenu2("num"); break;
   case "2": subMenu2("name"); break;
   case "3": subMenu2("city"); break;
   case "4": subMenu2("buseo"); break;
   case "5": subMenu2("jikwi"); break;
   }
   System.out.println();
  
  }while(true);
 }
 
 //menu2에 대한 서브 메뉴 메소드
 private void subMenu2(String key) {
  System.out.printf("전체 인원: %d명%n", dao.count());
  System.out.println("----------------------");
  //사번,이름,주민번호,입사일,전화번호
  //,지역,부서,직위,기본급,수당,급여
  System.out.println("NUM NAME SSN IBSADATE TEL CITY BUSEO JIKWI BASICPAY SUDANG PAY");
  for (Insa insa : dao.list(key)) {
   System.out.printf("%s %s %s %s %s %s %s %s %,d %,d %,d %n"
     , insa.getNum()
     , insa.getName()
     , insa.getSsn()
     , insa.getIbsadate()
     , insa.getTel()
     , insa.getCity()
     , insa.getBuseo()
     , insa.getJikwi()
     , insa.getBasicPay()
     , insa.getSudang()
     , insa.getPay()
     );
  }
 }

 //3. 직원 검색 출력
 public void menu3(Scanner sc) {
  //서브메뉴
  do {
   //문제)
   //서브메뉴 종류 출력
   //서브메뉴 선택
  
   //서브메뉴별로 정렬 기준 제시
   //->private 메소드 호출
   //예를 들어,
   //case "1": subMenu3(sc, 1); break;
   //case "2": subMenu3(sc, 2); break;
   System.out.println("직원 검색 출력(서브 메뉴)-------------");
   System.out.println("1. 사번 검색");
   System.out.println("2. 이름 검색");
   System.out.println("3. 지역 검색");
   System.out.println("4. 부서 검색");
   System.out.println("5. 직위 검색");
   System.out.print("선택(1~5, x 종료)?");
   String m = sc.next();
   if (m.equalsIgnoreCase("x")) {
    break;
   }
  
   switch (m) {
   case "1": subMenu3(sc, 1); break;
   case "2": subMenu3(sc, 2); break;
   case "3": subMenu3(sc, 3); break;
   case "4": subMenu3(sc, 4); break;
   case "5": subMenu3(sc, 5); break;
   }
   System.out.println();
  
  }while(true);

 }
 
 //menu3에 대한 서브 메뉴 메소드
 private void subMenu3(Scanner sc, int m) {
  String[] arr1 = {"", "사번", "이름", "지역", "부서", "직위"};
  String[] arr2 = {"", "num", "name", "city", "buseo", "jikwi"};
  System.out.printf("검색할 %s?", arr1[m]);
  String value = sc.next();
  String key = arr2[m];
 
  System.out.printf("검색 인원: %d명%n", dao.count(key, value));
  System.out.println("----------------------");
  ArrayList<Insa> list = dao.list(key, value);
  if (list.size() > 0) {
   //사번,이름,주민번호,입사일,전화번호
   //,지역,부서,직위,기본급,수당,급여
   System.out.println("NUM NAME SSN IBSADATE TEL CITY BUSEO JIKWI BASICPAY SUDANG PAY");
   for (Insa insa : list) {
    System.out.printf("%s %s %s %s %s %s %s %s %,d %,d %,d %n"
      , insa.getNum()
      , insa.getName()
      , insa.getSsn()
      , insa.getIbsadate()
      , insa.getTel()
      , insa.getCity()
      , insa.getBuseo()
      , insa.getJikwi()
      , insa.getBasicPay()
      , insa.getSudang()
      , insa.getPay()
      );
   }
  } else {
   System.out.println("검색 결과 없습니다.");
  }
 
 }

 //4. 직원 삭제
 public void menu4(Scanner sc) {
 
  System.out.print("삭제하고자하는 자료의 사번?");
  String num = sc.next();
 
  ArrayList<Insa> list = dao.list("num", num);
  if (list.size() > 0) {
   System.out.println("NUM NAME SSN IBSADATE TEL CITY BUSEO JIKWI BASICPAY SUDANG PAY");
   for (Insa insa : list) {
    System.out.printf("%s %s %s %s %s %s %s %s %,d %,d %,d %n"
      , insa.getNum()
      , insa.getName()
      , insa.getSsn()
      , insa.getIbsadate()
      , insa.getTel()
      , insa.getCity()
      , insa.getBuseo()
      , insa.getJikwi()
      , insa.getBasicPay()
      , insa.getSudang()
      , insa.getPay()
      );
   }
  
   System.out.print("이 자료를 삭제하시겠습니까(Y/N)?");
   String c = sc.next();
   if (c.equalsIgnoreCase("y")) {
    int result = dao.remove(num);
    System.out.printf("%d개의 행이 삭제되었습니다.%n", result);
   }
  
  } else {
   System.out.println("검색 결과 없습니다.");
  }
 
 
 }

 //패턴 검사 private 메소드
 private static boolean patternCheck(String pattern, String value) {
  Pattern p = Pattern.compile(pattern);
  Matcher m = p.matcher(value);
  return m.matches();
 }
 
 //날짜 검사 private 메소드
 private static boolean dateCheck(String date) {
  boolean result = false;
  try {
   //"yyyy-MM-dd" 형식에서 대소문자 구분
   SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
   df.setLenient(false);
   df.parse(date);
   result = true;
  }catch(Exception e){
  }
  return result;
 }
 
 private String cityList() {
  StringBuilder sb = new StringBuilder();
 
  for (City c : dao.cityList()) {
   sb.append(String.format("%s-%s "
     ,c.getCid(), c.getCity()));
  }
 
  return sb.toString();
 }

 private String buseoList() {
  StringBuilder sb = new StringBuilder();
 
  for (Buseo b : dao.buseoList()) {
   sb.append(String.format("%s-%s "
     ,b.getBid(), b.getBuseo()));
  }

  return sb.toString();
 }

 private String jikwiList() {
  StringBuilder sb = new StringBuilder();
 
  for (Jikwi j : dao.jikwiList()) {
   sb.append(String.format("%s-%s "
     ,j.getJid(), j.getJikwi()));
  }

  return sb.toString();
 }
 
}

=======================

 

//Main.java -> 메인 클래스. 콘솔 액션.
package com.test;

import java.util.*;

public class Main {
 public static void main(String ar[]) throws Exception {

  Scanner sc = new Scanner(System.in);
  MenuAction menu = new MenuAction();

  do {
   System.out.println();
   System.out.println("--- 직원 관리 ---");
   System.out.println("1. 직원 입력");
   System.out.println("2. 직원 전체 출력");
   System.out.println("- 사번 정렬");
   System.out.println("- 이름 정렬");
   System.out.println("- 지역 정렬");
   System.out.println("- 부서 정렬");
   System.out.println("- 직위 정렬");
   System.out.println("3. 직원 검색 출력");
   System.out.println("- 사번 검색");
   System.out.println("- 이름 검색");
   System.out.println("- 지역 검색");
   System.out.println("- 부서 검색");
   System.out.println("- 직위 검색");
   System.out.println("4. 직원 삭제");
   System.out.print("선택(1~4, x 종료)?");
   int m = sc.nextInt();
   if (m == 0) {
    break;
   }
   switch (m) {
   case 1:
    menu.menu1(sc);
    break;
   case 2:
    menu.menu2(sc);
    break;
   case 3:
    menu.menu3(sc);
    break;
   case 4:
    menu.menu4(sc);
    break;
   }
   try {

   } catch (Exception e) {
    System.out.println(e.toString());
   }
  } while (true);
  sc.close();
 }
}

 

 

 

 

==============================

 

//City.java -> 지역 정보 자료형 클래스
package com.test;

//자료형 클래스
public class City {
 
 private String cid, city;

 public String getCid() {
  return cid;
 }

 public void setCid(String cid) {
  this.cid = cid;
 }

 public String getCity() {
  return city;
 }

 public void setCity(String city) {
  this.city = city;
 }
 
}

 

=================================

 

//Buseo.java -> 부서 정보 자료형 클래스
package com.test;

//자료형클래스
public class Buseo {
 
 private String bid, buseo;

 public String getBid() {
  return bid;
 }

 public void setBid(String bid) {
  this.bid = bid;
 }

 public String getBuseo() {
  return buseo;
 }

 public void setBuseo(String buseo) {
  this.buseo = buseo;
 }
}
======================================

 

//Jikwi.java -> 직위 정보 자료형 클래스
package com.test;

//자료형클래스
public class Jikwi {

 private String jid, jikwi;
 private int min_Basicpay;
 public String getJid() {
  return jid;
 }
 public void setJid(String jid) {
  this.jid = jid;
 }
 public String getJikwi() {
  return jikwi;
 }
 public void setJikwi(String jikwi) {
  this.jikwi = jikwi;
 }
 public int getMin_Basicpay() {
  return min_Basicpay;
 }
 public void setMin_Basicpay(int min_Basicpay) {
  this.min_Basicpay = min_Basicpay;
 }
}
===============================================

 

//Insa.java -> 직원 정보 자료형 클래스
package com.test;

//자료형클래스
public class Insa {

 // 멤버변수 -> num, name, ssn, ibsadate,tel, city, buseo, jikwi, basicpay, sudang, pay, cid, bid, jid
 private String num, name, ssn, ibsadate, tel, city, buseo, jikwi, cid, bid,jid;

 //basicpay, sudang, pay를 int형으로 하는 이유 : 나중에 천 단위 별로 , 을 찍어내는 서식을 나타내기 위해
 private int basicpay, sudang, pay;
 
 public String getNum() {
  return num;
 }
 public void setNum(String num) {
  this.num = num;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getSsn() {
  return ssn;
 }
 public void setSsn(String ssn) {
  this.ssn = ssn;
 }
 public String getIbsadate() {
  return ibsadate;
 }
 public void setIbsadate(String ibsadate) {
  this.ibsadate = ibsadate;
 }
 public String getTel() {
  return tel;
 }
 public void setTel(String tel) {
  this.tel = tel;
 }
 public String getCity() {
  return city;
 }
 public void setCity(String city) {
  this.city = city;
 }
 public String getBuseo() {
  return buseo;
 }
 public void setBuseo(String buseo) {
  this.buseo = buseo;
 }
 public String getJikwi() {
  return jikwi;
 }
 public void setJikwi(String jikwi) {
  this.jikwi = jikwi;
 }
 public String getCid() {
  return cid;
 }
 public void setCid(String cid) {
  this.cid = cid;
 }
 public String getBid() {
  return bid;
 }
 public void setBid(String bid) {
  this.bid = bid;
 }
 public String getJid() {
  return jid;
 }
 public void setJid(String jid) {
  this.jid = jid;
 }
 public int getBasicpay() {
  return basicpay;
 }
 public void setBasicpay(int basicpay) {
  this.basicpay = basicpay;
 }
 public int getSudang() {
  return sudang;
 }
 public void setSudang(int sudang) {
  this.sudang = sudang;
 }
 public int getPay() {
  return pay;
 }
 public void setPay(int pay) {
  this.pay = pay;
 }

}

=====================================================

 

//insaDAO
package com.test;

import java.sql.*;
import java.util.*;

//데이터베이스 액션 클래스
public class InsaDAO {

 // 직원 정보 출력 메소드
 // 반환 자료형 -> ArrayList<Insa>;
 // 매개변수 -> key -> 정렬기준(사번,이름,지역,부서,직위)
 // ==========================================================
 // ->DB에서 정렬된 값을 받는다. ORDER BY이용.(5종류)
 // 정렬방법(사번,이름,지역,부서,직위) 각 기준별로 작성.
 // select 구문을 기준별 작성 후, select쿼리 실행!
 // ==========================================================

 public ArrayList<Insa> list(String key) {
  ArrayList<Insa> result = new ArrayList<Insa>();

  Connection conn = null;
  PreparedStatement pstmt = null;

  try {
   conn = DBConn.getConnection();
   // switch(key){
   // case "사번"
   // sql += "ORDER BY num";
   // break;
   // case "이름"
   // sql += "ORDER BY name";
   // }
   String sql = String
     .format("SELECT num, name, ssn, ibsadate, city, tel, buseo, jikwi, basicpay, sudang, pay from insaView ORDER BY %s",
       key);
   pstmt = conn.prepareStatement(sql);
   ResultSet rs = pstmt.executeQuery();
   while (rs.next()) {
    String num = rs.getString("num");
    String name = rs.getString("name");
    String ssn = rs.getString("ssn");
    String ibsadate = rs.getString("ibsadate");
    String city = rs.getString("city");
    String tel = rs.getString("tel");
    String buseo = rs.getString("buseo");
    String jikwi = rs.getString("jikwi");
    int basicpay = rs.getInt("basicpay");
    int sudang = rs.getInt("sudang");
    int pay = rs.getInt("pay");

    Insa i = new Insa();
    i.setNum(num);
    i.setName(name);
    i.setSsn(ssn);
    i.setIbsadate(ibsadate);
    i.setCity(city);
    i.setTel(tel);
    i.setBuseo(buseo);
    i.setJikwi(jikwi);
    i.setBasicpay(basicpay);
    i.setSudang(sudang);
    i.setPay(pay);
    result.add(i);
   }
   rs.close();

  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   try {
    if (pstmt != null) {
     pstmt.close();
    }
   } catch (Exception e) {

   }
   DBConn.close();
  }
  return result;
 }

 // ======================================================================================================

 // 직원 정보 검색
 // 반환 자료형 -> ArrayList<Insa>;
 // 매개변수 -> key(검색기준), value(검색단어) -> 정렬기준(사번,이름,지역,부서,직위) 검색
 // ==========================================================
 // ->DB에서 정렬된 값을 받는다. ORDER BY sid; 이용.
 // ==========================================================
 // 검색 기준별로 검색 액션 준비
 // 검색 액션은 WHERE 컬럼명 = 값; 구문 준비(5종류)
 public ArrayList<Insa> list(String key, String value) {
  ArrayList<Insa> result = new ArrayList<Insa>();

  Connection conn = null;
  PreparedStatement pstmt = null;

  try {
   conn = DBConn.getConnection();
   String sql = String
     .format("select num, name, ssn, ibsadate, city, tel, buseo, jikwi, basicpay, sudang, pay from insaView where %s = ? order by num",
       key);

   // where %s=? => where name = '홍길동' => O
   // where ?=? => where 'name' = '홍길동' => X

   pstmt = conn.prepareStatement(sql);
   pstmt.setString(1, value);

   ResultSet rs = pstmt.executeQuery();
   while (rs.next()) {

    String num = rs.getString("num");
    String name = rs.getString("name");
    String ssn = rs.getString("ssn");
    String ibsadate = rs.getString("ibsadate");
    String city = rs.getString("city");
    String tel = rs.getString("tel");
    String buseo = rs.getString("buseo");
    String jikwi = rs.getString("jikwi");
    int basicpay = rs.getInt("basicpay");
    int sudang = rs.getInt("sudang");
    int pay = rs.getInt("pay");

    Insa i = new Insa();
    i.setNum(num);
    i.setName(name);
    i.setSsn(ssn);
    i.setIbsadate(ibsadate);
    i.setCity(city);
    i.setTel(tel);
    i.setBuseo(buseo);
    i.setJikwi(jikwi);
    i.setBasicpay(basicpay);
    i.setSudang(sudang);
    i.setPay(pay);
    result.add(i);
   }
   rs.close();

  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   try {
    if (pstmt != null) {
     pstmt.close();
    }
   } catch (Exception e) {

   }
   DBConn.close();
  }
  return result;
 }

 // ======================================================================================================
 // 직원삭제 메소드
 // 반환자료형 -> int형 -> 삭제된 로우의 갯수 반환
 // 매개변수 -> String num -> 사번을 외부에서 전달받음.
 public int remove(String num) {
  int result = 0;

  Connection conn = null;
  PreparedStatement pstmt = null;

  try {
   conn = DBConn.getConnection();
   // 삭제 쿼리.delete from insa where num = 1060
   String sql = String.format("delete from insa where num = ?");
   pstmt = conn.prepareStatement(sql);
   pstmt.setInt(1, Integer.parseInt(num));
   // delete from insa where num = 1060;

   result = pstmt.executeUpdate();

  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   try {
    if (pstmt != null) {
     pstmt.close();
    }
   } catch (Exception e) {

   }
   DBConn.close();
  }
  return result;

 }

 // ======================================================================================================
 // 직원정보 입력 메소드
 // 데이터베이스 연결, 입력쿼리 준비
 // Insert ...
 // 바인딩 문자열에 변수값 (insa.getxxx())바인딩
 /*
  * (Insert into insa(num, name, ssn, ibsadate, tel, cid, bid, jid, basicpay,
  * sudang) values((select MAX(num)+1 as newNum from insa),?,?,?,?,?,?,?,?,?)
  */
 // (select MAX(num)+1 as newNum from insa) 시퀀스 사용안하고 기존데이터와 번호가 겹치지 않게 생성하는
 // 쿼리.
 // 입력쿼리 샐행 -> 결과값을 변수에 저장
 // 0-> 입력 실패, 1 -> 입력 성공
 // 데이터베이스 연결 마무리
 // 결과값 반환

 public int add(Insa i) {
  int result = 0;

  Connection conn = null;
  PreparedStatement pstmt = null;

  try {
   conn = DBConn.getConnection();
   String sql = String
     .format("Insert into insa(num, name, ssn, ibsadate, tel, cid, bid, jid, basicpay, sudang) values((select MAX(num)+1 as newNum from insa),?,?,?,?,?,?,?,?,?)");
   pstmt = conn.prepareStatement(sql);

   pstmt.setString(1, i.getName());
   pstmt.setString(2, i.getSsn());
   pstmt.setString(3, i.getIbsadate());
   pstmt.setString(4, i.getTel());
   pstmt.setInt(5, Integer.parseInt(i.getCid()));
   pstmt.setInt(6, Integer.parseInt(i.getBid()));
   pstmt.setInt(7, Integer.parseInt(i.getJid()));
   pstmt.setInt(8, i.getBasicpay());
   pstmt.setInt(9, i.getSudang());
   result = pstmt.executeUpdate();

  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   try {
    if (pstmt != null) {
     pstmt.close();
    }
   } catch (Exception e) {

   }
   DBConn.close();
  }

  return result;
 }
 
 //======================================================================================================

 // 부서,직위,시티의 메소드의 역할 = 명단을 불러오는 역할.

 // 지역 정보 출력 메소드

 // 데이터 베이스 연결
 // select 쿼리 준비 및 실행
 // 결과를 변수 city객체 저장 -> 컬렉션(clist)
 // 데이터 베이스 연결 마무리
 // 컬렉션 반환

 public ArrayList<City> cityList() {
  ArrayList<City> clist = new ArrayList<City>();

  Connection conn = null;
  PreparedStatement pstmt = null;

  try {
   conn = DBConn.getConnection();
   String sql = String
     .format("select cid, city from city order by cid");
   pstmt = conn.prepareStatement(sql);
   ResultSet rs = pstmt.executeQuery();
   while (rs.next()) {
    String cid = rs.getString("cid");
    String city = rs.getString("city");
    City c = new City();
    c.setCid(cid);
    c.setCity(city);
    clist.add(c);
   }
   rs.close();

  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   try {
    if (pstmt != null) {
     pstmt.close();
    }
   } catch (Exception e) {

   }
   DBConn.close();
  }

  return clist;
 }
 //======================================================================================================
 // 부서 정보 출력 메소드
 public ArrayList<Buseo> buseoList() {
  ArrayList<Buseo> blist = new ArrayList<Buseo>();

  Connection conn = null;
  PreparedStatement pstmt = null;

  try {
   conn = DBConn.getConnection();
   String sql = String
     .format("select bid, buseo from buseo order by bid");
   pstmt = conn.prepareStatement(sql);
   ResultSet rs = pstmt.executeQuery();
   while (rs.next()) {
    String bid = rs.getString("bid");
    String buseo = rs.getString("buseo");
    Buseo b = new Buseo();
    b.setBid(bid);
    b.setBuseo(buseo);
    blist.add(b);
   }
   rs.close();

  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   try {
    if (pstmt != null) {
     pstmt.close();
    }
   } catch (Exception e) {

   }
   DBConn.close();
  }

  return blist;
 }
 //======================================================================================================
 // 직위 정보 출력 메소드
 public ArrayList<Jikwi> jikwiList() {
  ArrayList<Jikwi> jlist = new ArrayList<Jikwi>();

  Connection conn = null;
  PreparedStatement pstmt = null;

  try {
   conn = DBConn.getConnection();
   String sql = String
     .format("select jid, jikwi,min_basicpay from jikwi order by jid");
   pstmt = conn.prepareStatement(sql);
   ResultSet rs = pstmt.executeQuery();

   while (rs.next()) {
    String jid = rs.getString("jid");
    String jikwi = rs.getString("jikwi");
    int min_basicpay = rs.getInt("min_basicpay");

    Jikwi j = new Jikwi();
    j.setJid(jid);
    j.setJikwi(jikwi);
    j.setMin_Basicpay(min_basicpay);
    jlist.add(j);
   }
   rs.close();

  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   try {
    if (pstmt != null) {
     pstmt.close();
    }
   } catch (Exception e) {

   }
   DBConn.close();
  }

  return jlist;
 }
 //======================================================================================================
 // 직원 전체 인숸수 반환 메소드
 public int count() {
  int result = 0;

  Connection conn = null;
  PreparedStatement pstmt = null;

  try {
   conn = DBConn.getConnection();

   String sql = String
     .format("SELECT COUNT(*) AS \"count\" FROM insaView");

   pstmt = conn.prepareStatement(sql);
   ResultSet rs = pstmt.executeQuery();
   while (rs.next()) {
    result = rs.getInt("count");
   }
   rs.close();
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   DBConn.close();
   try {
    if (pstmt != null) {
     pstmt.close();
    }
   } catch (Exception e) {

   }
  }
  return result;
 }

 //======================================================================================================
 // key, value는 검색조건에 맞는 인원수 출력
 public int count(String key, String value) {
  int result = 0;

  Connection conn = null;
  PreparedStatement pstmt = null;

  try {
   conn = DBConn.getConnection();
   String sql = String
     .format("select COUNT(*) AS \"count\" from insaView where %s = ?",
       key);

   pstmt = conn.prepareStatement(sql);
   pstmt.setString(1, value);

   ResultSet rs = pstmt.executeQuery();

   while (rs.next()) {
    result = rs.getInt("count");

   }
   rs.close();

  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   try {
    if (pstmt != null) {
     pstmt.close();
    }
   } catch (Exception e) {

   }
   DBConn.close();
  }

  return result;
 }
 //======================================================================================================
 // 최소 기본급 검색 쿼리
 public int getMinBasicPay(String jid) {
  int result = 0;

  Connection conn = null;
  PreparedStatement pstmt = null;

  try {
   conn = DBConn.getConnection();
   String sql = String
     .format("select min_basicPay from jikwi where jid = ?");

   pstmt = conn.prepareStatement(sql);
   pstmt.setInt(1, Integer.parseInt(jid));

   ResultSet rs = pstmt.executeQuery();

   while (rs.next()) {
    result = rs.getInt("min_basicPay");

   }
   rs.close();

  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   try {
    if (pstmt != null) {
     pstmt.close();
    }
   } catch (Exception e) {

   }
   DBConn.close();
  }
  return result;
 }
 
 //======================================================================================================
 //자바에서만 실행 가능.
 //내가 입력한 명령어의 패턴을 검사하여 일치하는지 확인.
 
}

 

=================================

 

patterTest

package com.test;

import java.util.regex.*;

public class PatternTest {
 public static void main(String ar[]) {

  String ssn = "123456-1234567";
  String ssnPattern = "\\d{6}-\\d{7}";

  // 주민번호 형식 검사
  // 정규식표현 ->\d{6}-\d{7}
  // ->자바사용시 ->\\d{6}-\\d{7}
  // 숫자 6자리 - 숫자 7자리 의 형식을 갖춰야 일치여부 판별

  Pattern p = Pattern.compile(ssnPattern); // ("패턴문자");
  Matcher m = p.matcher(ssn); // (비교문자);
  if (PatternCheck(ssnPattern, ssn)) {
   System.out.println("SSN : 일치합니다");
  } else {
   System.out.println("SSN : 불일치 합니다.");
  }

  // 전화번호 형식 검사
  String tel = "010-1023-1234";
  String telPattern = "010-\\d{4}-\\d{4}";

  if (PatternCheck(telPattern, tel)) {
   System.out.println("TEL : 일치합니다");
  } else {
   System.out.println("TEL : 불일치 합니다.");
  }
  
  //날짜 형식 검사
  String ibsadate = "2015-15-15";
  String datePattern= "\\d{4}-\\d{2}-\\d{2}";

  if (PatternCheck(datePattern, ibsadate)) {
   System.out.println("IbsaDate : 일치합니다");
  } else {
   System.out.println("IbsaDate : 불일치 합니다.");
  }  
  

 }

 private static boolean PatternCheck(String pattern, String value) {
  Pattern p = Pattern.compile(pattern); // ("패턴문자");
  Matcher m = p.matcher(value); // (비교문자);
  return m.matches();
 }
}

 

=========================

 

removeTest

package com.test;

import java.util.*;

public class RemoveTest {
 public static void main(String ar[]) {

  InsaDAO dao = new InsaDAO();
  Scanner sc = new Scanner(System.in);

  String num = "1060";

  ArrayList<Insa> list = dao.list("num", num);
  if (list.size() > 0) {
   // 검색결과 있는것. 결과 있을경우 결과출력 / 삭제진행
   for (Insa i : list) {
    System.out.printf("%s %s %s %s %s %s %s %s %,d %,d %,d %n",
      i.getNum(), i.getName(), i.getSsn(), i.getIbsadate(),
      i.getTel(), i.getCity(), i.getBuseo(), i.getJikwi(),
      i.getBasicpay(), i.getSudang(), i.getPay());
   }

   System.out.println("이 자료를 삭제 하시겠습니까?(Y/N)");
   String m = sc.next();
   if (m.equalsIgnoreCase("y")) {
    // 삭제진행 -> private메소드
    delete(num);
    //dao.remove(num);
   }

  } else {
   // 검색결과 없는것.
   System.out.println("검색결과 없습니다.");
  }
 }

 private static int delete(String num) {
  int result = 0;
  InsaDAO dao = new InsaDAO();
  result = dao.remove(num);
  return result;
 }
}
==========================

 

ListTest

package com.test;

import java.util.*;

public class ListTest {
 public static void main(String ar[]) {

  InsaDAO dao = new InsaDAO();
  System.out.printf("지역번호 종류(%s)%n",cityList(dao));
  System.out.printf("부서번호 종류(%s)%n",BuseoList(dao));
  System.out.printf("직위번호 종류(%s)%n",JikwiList(dao));
  
  
  
 }

 private static String cityList(InsaDAO dao) {
  StringBuilder sb = new StringBuilder();
  
  for(City c : dao.cityList()){
   sb.append(String.format("%s-%s ", c.getCid(),c.getCity()));
   
  }
  
  return sb.toString();
 }
 
 private static String BuseoList(InsaDAO dao){
  StringBuilder sb = new StringBuilder();
  
  for(Buseo b : dao.buseoList()){
   sb.append(String.format("%s-%s ", b.getBid(),b.getBuseo()));
  }
  return sb.toString();
 }
 
 private static String JikwiList(InsaDAO dao){
  StringBuilder sb = new StringBuilder();
  
  for(Jikwi j : dao.jikwiList()){
   sb.append(String.format("%s-%s ",j.getJid(),j.getJikwi()));
  }
  return sb.toString();
 }
}
=======================

CountTest

package com.test;

public class CountTest {
 public static void main(String ar[]){
  
  InsaDAO dao = new InsaDAO();
  
  System.out.printf("전체 인원수 : %s명 %n", dao.count());
  String key = "buseo";
  String value = "개발부";
  System.out.printf("검색 인원수 : %s명%n",dao.count(key, value));
 }
}
=======================

AddTest

package com.test;
import java.util.*;
public class AddTest {
 public static void main(String ar[]) {
  Scanner sc = new Scanner(System.in);
  InsaDAO dao = new InsaDAO();
  
  //name, ssn, ibsadate, tel, cid, bid, jid, basicpay, sudang
  String name = "황길동";
  String ssn = "620211-2354846";
  String ibsadate = "1999-03-02";
  //07/03/02, 19910301, 1999-03-02
  String tel = "011-796-3541";
  String cid = "2";
  String bid = "3";
  String jid = "1";
  int basicpay = 1500000;
  int sudang = 3000000;
  
  Insa insa = new Insa();
  insa.setName(name);
  insa.setSsn(ssn);
  insa.setIbsadate(ibsadate);
  insa.setTel(tel);
  insa.setCid(cid);
  insa.setBid(bid);
  insa.setJid(jid);
  insa.setBasicpay(basicpay);
  insa.setSudang(sudang);
  
  //정상적인 입력액션 -> 1개의 행이 삽입되었습니다.
  //에러 발생 -> 0개의 행이 삽입되었습니다.
  int result = dao.add(insa);
  System.out.printf("%d개의 행이 입력 되었습니다. %n", result);
 }
}

'JDBC' 카테고리의 다른 글

12일차_방명록  (0) 2015.06.21
11일차_방명록  (0) 2015.06.21
9일차_직원관리  (0) 2015.06.21
8일차_직원관리  (0) 2015.06.21
7일차_직원관리  (0) 2015.06.21
블로그 이미지

알 수 없는 사용자

,