--------------------------------------
직원 관리
- 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);
}
}