Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

Everything has an expiration date

★★★ JDBC 20231124 [프로그래밍 소스 (선생님 해설)] - MemberDTO, MemberDAO, MemberMain, MemberProcess 본문

[JDBC]/Program source (JDBC)

★★★ JDBC 20231124 [프로그래밍 소스 (선생님 해설)] - MemberDTO, MemberDAO, MemberMain, MemberProcess

Jelly-fish 2023. 11. 24. 13:23

 

JDBC05_scott.sql - 새롭게 View 생성 (EMPVIEW)

SELECT USER
FROM DUAL;
--==>> SCOTT


--○ 실습 테이블 생성
CREATE TABLE TBL_CITY
( CITY_ID   NUMBER(5)
, CITY_NAME VARCHAR2(10)
, CONSTRAINT CITY_CITY_ID_PK PRIMARY KEY(CITY_ID)
);
--==>> Table TBL_CITY이(가) 생성되었습니다.


--○ 시퀀스 생성
CREATE SEQUENCE CITYSEQ
NOCACHE;
--==>> Sequence CITYSEQ이(가) 생성되었습니다.


--○ 데이터 입력
-- 강원 경기 경남 경북 부산 서울 인천 전남 전북 제주 충남 충북
INSERT INTO TBL_CITY(CITY_ID, CITY_NAME) VALUES(CITYSEQ.NEXTVAL, '강원');
INSERT INTO TBL_CITY(CITY_ID, CITY_NAME) VALUES(CITYSEQ.NEXTVAL, '경기');
INSERT INTO TBL_CITY(CITY_ID, CITY_NAME) VALUES(CITYSEQ.NEXTVAL, '경남');
INSERT INTO TBL_CITY(CITY_ID, CITY_NAME) VALUES(CITYSEQ.NEXTVAL, '경북');
INSERT INTO TBL_CITY(CITY_ID, CITY_NAME) VALUES(CITYSEQ.NEXTVAL, '부산');
INSERT INTO TBL_CITY(CITY_ID, CITY_NAME) VALUES(CITYSEQ.NEXTVAL, '서울');
INSERT INTO TBL_CITY(CITY_ID, CITY_NAME) VALUES(CITYSEQ.NEXTVAL, '인천');
INSERT INTO TBL_CITY(CITY_ID, CITY_NAME) VALUES(CITYSEQ.NEXTVAL, '전남');
INSERT INTO TBL_CITY(CITY_ID, CITY_NAME) VALUES(CITYSEQ.NEXTVAL, '전북');
INSERT INTO TBL_CITY(CITY_ID, CITY_NAME) VALUES(CITYSEQ.NEXTVAL, '제주');
INSERT INTO TBL_CITY(CITY_ID, CITY_NAME) VALUES(CITYSEQ.NEXTVAL, '충남');
INSERT INTO TBL_CITY(CITY_ID, CITY_NAME) VALUES(CITYSEQ.NEXTVAL, '충북');


--○ 확인
SELECT *
FROM TBL_CITY;
/*
1	강원
2	경기
3	경남
4	경북
5	부산
6	서울
7	인천
8	전남
9	전북
10	제주
11	충남
12	충북
*/


COMMIT;
--==>> 커밋 완료.


--○ 실습 테이블 생성
CREATE TABLE TBL_BUSEO
( BUSEO_ID      NUMBER(5)
, BUSEO_NAME    VARCHAR2(20)
, CONSTRAINT BUSEO_BUSEO_ID_PK  PRIMARY KEY(BUSEO_ID)
);
--==>> Table TBL_BUSEO이(가) 생성되었습니다.


--○ 시퀀스 생성
CREATE SEQUENCE BUSEOSEQ
NOCACHE;
--==>> Sequence BUSEOSEQ이(가) 생성되었습니다.


--○ 데이터 입력
-- 개발부 기획부 영업부 인사부 자재부 총무부 홍보부
INSERT INTO TBL_BUSEO(BUSEO_ID, BUSEO_NAME) VALUES(BUSEOSEQ.NEXTVAL, '개발부');
INSERT INTO TBL_BUSEO(BUSEO_ID, BUSEO_NAME) VALUES(BUSEOSEQ.NEXTVAL, '기획부');
INSERT INTO TBL_BUSEO(BUSEO_ID, BUSEO_NAME) VALUES(BUSEOSEQ.NEXTVAL, '영업부');
INSERT INTO TBL_BUSEO(BUSEO_ID, BUSEO_NAME) VALUES(BUSEOSEQ.NEXTVAL, '인사부');
INSERT INTO TBL_BUSEO(BUSEO_ID, BUSEO_NAME) VALUES(BUSEOSEQ.NEXTVAL, '자재부');
INSERT INTO TBL_BUSEO(BUSEO_ID, BUSEO_NAME) VALUES(BUSEOSEQ.NEXTVAL, '총무부');
INSERT INTO TBL_BUSEO(BUSEO_ID, BUSEO_NAME) VALUES(BUSEOSEQ.NEXTVAL, '홍보부');


--○ 확인
SELECT *
FROM TBL_BUSEO;
/*
1	개발부
2	기획부
3	영업부
4	인사부
5	자재부
6	총무부
7	홍보부
*/

--○ 커밋
COMMIT;
--==>> 커밋 완료.


--○ 실습 테이블 생성
CREATE TABLE TBL_JIKWI
( JIKWI_ID      NUMBER(5)
, JIKWI_NAME    VARCHAR2(20)
, MIN_BASICPAY  NUMBER(10)
, CONSTRAINT JIKWI_JIKWI_ID_PK PRIMARY KEY(JIKWI_ID)
);
--==>> Table TBL_JIKWI이(가) 생성되었습니다.


--○ 시퀀스 생성
CREATE SEQUENCE JIKWISEQ
NOCACHE;
--==>> Sequence JIKWISEQ이(가) 생성되었습니다.


--○ 데이터 입력
-- 사장 전무 상무 이사 부장 차장 과장 대리 사원
INSERT INTO TBL_JIKWI(JIKWI_ID, JIKWI_NAME, MIN_BASICPAY) VALUES(JIKWISEQ.NEXTVAL, '사장', 4250000);
INSERT INTO TBL_JIKWI(JIKWI_ID, JIKWI_NAME, MIN_BASICPAY) VALUES(JIKWISEQ.NEXTVAL, '전무', 3800000);
INSERT INTO TBL_JIKWI(JIKWI_ID, JIKWI_NAME, MIN_BASICPAY) VALUES(JIKWISEQ.NEXTVAL, '상무', 3500000);
INSERT INTO TBL_JIKWI(JIKWI_ID, JIKWI_NAME, MIN_BASICPAY) VALUES(JIKWISEQ.NEXTVAL, '이사', 3100000);
INSERT INTO TBL_JIKWI(JIKWI_ID, JIKWI_NAME, MIN_BASICPAY) VALUES(JIKWISEQ.NEXTVAL, '부장', 2450000);
INSERT INTO TBL_JIKWI(JIKWI_ID, JIKWI_NAME, MIN_BASICPAY) VALUES(JIKWISEQ.NEXTVAL, '차장', 2350000);
INSERT INTO TBL_JIKWI(JIKWI_ID, JIKWI_NAME, MIN_BASICPAY) VALUES(JIKWISEQ.NEXTVAL, '과장', 2260000);
INSERT INTO TBL_JIKWI(JIKWI_ID, JIKWI_NAME, MIN_BASICPAY) VALUES(JIKWISEQ.NEXTVAL, '대리', 1800000);
INSERT INTO TBL_JIKWI(JIKWI_ID, JIKWI_NAME, MIN_BASICPAY) VALUES(JIKWISEQ.NEXTVAL, '사원', 1650000);

--○
SELECT *
FROM TBL_JIKWI;
/*
1	사장	4250000
2	전무	3800000
3	상무	3500000
4	이사	3100000
5	부장	2450000
6	차장	2350000
7	과장	2260000
8	대리	1800000
9	사원	1650000
*/


--○ 커밋
COMMIT;
--==>> 커밋 완료.


--○ 기존 테이블 제거
DROP TABLE TBL_EMP;
--==>> Table TBL_EMP이(가) 삭제되었습니다.


--○ 실습 테이블 생성
-- 사번 이름 주민번호 입사일 지역 전화번호 부서 직위 기본급 수당
CREATE TABLE TBL_EMP
( EMP_ID    NUMBER(5)
, EMP_NAME  VARCHAR2(30)
, SSN       CHAR(14)
, IBSADATE  DATE
, CITY_ID   NUMBER(5)
, TEL       VARCHAR2(20)
, BUSEO_ID  NUMBER(5)
, JIKWI_ID  NUMBER(5)
, BASICPAY  NUMBER(10)
, SUDANG    NUMBER(10)
);
--==>> Table TBL_EMP이(가) 생성되었습니다.


--○ 제약조건 설정
ALTER TABLE TBL_EMP
ADD( CONSTRAINT EMP_EMP_ID_PK PRIMARY KEY(EMP_ID)
    , CONSTRAINT EMP_CITY_ID_FK FOREIGN KEY(CITY_ID) REFERENCES TBL_CITY(CITY_ID)
    , CONSTRAINT EMP_BUSEO_ID_FK FOREIGN KEY(BUSEO_ID) REFERENCES TBL_BUSEO(BUSEO_ID)
    , CONSTRAINT EMP_JIKWI_ID_FK FOREIGN KEY(JIKWI_ID) REFERENCES TBL_JIKWI(JIKWI_ID) );
--==>> Table TBL_EMP이(가) 변경되었습니다.


--○ 시퀀스 생성
CREATE SEQUENCE EMPSEQ
START WITH 1001
NOCACHE;
--==>> Sequence EMPSEQ이(가) 생성되었습니다.


--○ 세션 설정 변경
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';
--==>> Session이(가) 변경되었습니다.


--○ 데이터 입력(날짜, 오라클 자동형변환 의지)
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '홍길동', '771212-1022432', '1998-10-11', 6, '011-2356-4528', 2, 5, 2610000, 200000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '이순신', '801007-1544236', '2000-11-29', 2, '010-4758-6532', 6, 9, 1320000, 200000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '이순애', '770922-2312547', '1999-02-25', 7, '010-4231-1236', 1, 5, 2550000, 160000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '김정훈', '790304-1788896', '2000-10-01', 9, '019-5236-4221', 3, 8, 1954200, 170000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '한석봉', '811112-1566789', '2004-08-13', 6, '018-5211-3542', 6, 9, 1420000, 160000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '이기자', '780505-2978541', '2002-02-11', 7, '010-3214-5357', 1, 7, 2265000, 150000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '장인철', '780506-1625148', '1998-03-16', 10, '011-2345-2525', 1, 8, 1250000, 150000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '김영년', '821011-2362514', '2002-04-30', 6, '016-2222-4444', 7, 9, 950000 , 145000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '나윤균', '810810-1552147', '2003-10-10', 2, '019-1111-2222', 4, 9, 840000 , 220400);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '김종서', '751010-1122233', '1997-08-08', 5, '011-3214-5555', 3, 5, 2540000, 130000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '유관순', '801010-2987897', '2000-07-07', 6, '010-8888-4422', 3, 9, 1020000, 140000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '정한국', '760909-1333333', '1999-10-16', 1, '018-2222-4242', 7, 9, 880000 , 114000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '조미숙', '790102-2777777', '1998-06-07', 2, '019-6666-4444', 7, 8, 1601000, 103000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '황진이', '810707-2574812', '2002-02-15', 7, '010-3214-5467', 1, 9, 1100000, 130000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '이현숙', '800606-2954687', '1999-07-26', 2, '016-2548-3365', 6, 9, 1050000, 104000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '이상헌', '781010-1666678', '2001-11-29', 2, '010-4526-1234', 1, 7, 2350000, 150000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '엄용수', '820507-1452365', '2000-08-28', 7, '010-3254-2542', 1, 9, 950000 , 210000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '이성길', '801028-1849534', '2004-08-08', 9, '018-1333-3333', 1, 9, 880000 , 123000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '박문수', '780710-1985632', '1999-12-10', 6, '017-4747-4848', 4, 7, 2300000, 165000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '유영희', '800304-2741258', '2003-10-10', 8, '011-9595-8585', 5, 9, 880000 , 140000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '홍길남', '801010-1111111', '2001-09-07', 2, '011-9999-7575', 1, 9, 875000 , 120000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '이영숙', '800501-2312456', '2003-02-25', 8, '017-5214-5282', 2, 8, 1960000, 180000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '김인수', '731211-1214576', '1995-02-23', 6, NULL           , 3, 5, 2500000, 170000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '김말자', '830225-2633334', '1999-08-28', 6, '011-5248-7789', 2, 8, 1900000, 170000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '우재옥', '801103-1654442', '2000-10-01', 6, '010-4563-2587', 3, 9, 1100000, 160000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '김숙남', '810907-2015457', '2002-08-28', 2, '010-2112-5225', 3, 9, 1050000, 150000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '김영길', '801216-1898752', '2000-10-18', 6, '019-8523-1478', 6, 7, 2340000, 170000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '이남신', '810101-1010101', '2001-09-07', 10, '016-1818-4848', 4, 9, 892000 , 110000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '김말숙', '800301-2020202', '2000-09-08', 6, '016-3535-3636', 6, 9, 920000 , 124000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '정정해', '790210-2101010', '1999-10-17', 5, '019-6564-6752', 6, 7, 2304000, 124000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '지재환', '771115-1687988', '2001-01-21', 6, '019-5552-7511', 2, 5, 2450000, 160000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '심심해', '810206-2222222', '2000-05-05', 9, '016-8888-7474', 5, 9, 880000 , 108000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '김미나', '780505-2999999', '1998-06-07', 6, '011-2444-4444', 3, 9, 1020000, 104000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '이정석', '820505-1325468', '2005-09-26', 2, '011-3697-7412', 2, 9, 1100000, 160000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '정영희', '831010-2153252', '2002-05-16', 7, NULL           , 1, 9, 1050000, 140000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '이재영', '701126-2852147', '2003-08-10', 6, '011-9999-9999', 5, 9, 960400 , 190000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '최석규', '770129-1456987', '1998-10-15', 7, '011-7777-7777', 7, 7, 2350000, 187000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '손인수', '791009-2321456', '1999-11-15', 5, '010-6542-7412', 3, 8, 2000000, 150000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '고순정', '800504-2000032', '2003-12-28', 2, '010-2587-7895', 3, 8, 2010000, 160000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '박세열', '790509-1635214', '2000-09-10', 4, '016-4444-7777', 4, 8, 2100000, 130000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '문길수', '721217-1951357', '2001-12-10', 11, '016-4444-5555', 5, 7, 2300000, 150000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '채정희', '810709-2000054', '2003-10-17', 2, '011-5125-5511', 1, 9, 1020000, 200000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '양미옥', '830504-2471523', '2003-09-24', 6, '016-8548-6547', 3, 9, 1100000, 210000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '지수환', '820305-1475286', '2004-01-21', 6, '011-5555-7548', 3, 9, 1060000, 220000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '홍원신', '690906-1985214', '2003-03-16', 9, '011-7777-7777', 3, 9, 960000 , 152000);			
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '허경운', '760105-1458752', '1999-05-04', 3, '017-3333-3333', 6, 5, 2650000, 150000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '산마루', '780505-1234567', '2001-07-15', 6, '018-0505-0505', 3, 8, 2100000, 112000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '이기상', '790604-1415141', '2001-06-07', 8, NULL           , 1, 8, 2050000, 106000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '이미성', '830908-2456548', '2000-04-07', 7, '010-6654-8854', 1, 9, 1300000, 130000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '이미인', '810403-2828287', '2003-06-07', 2, '011-8585-5252', 7, 8, 1950000, 103000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '권영미', '790303-2155554', '2000-06-04', 6, '011-5555-7548', 3, 7, 2260000, 104000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '권옥경', '820406-2000456', '2000-10-10', 2, '010-3644-5577', 2, 9, 1020000, 105000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '김싱식', '800715-1313131', '1999-12-12', 9, '011-7585-7474', 5, 9, 960000 , 108000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '정상호', '810705-1212141', '1999-10-16', 1, '016-1919-4242', 7, 9, 980000 , 114000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '정한나', '820506-2425153', '2004-06-07', 6, '016-2424-4242', 3, 9, 1000000, 104000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '전용재', '800605-1456987', '2004-08-13', 7, '010-7549-8654', 3, 8, 1950000, 200000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '이미경', '780406-2003214', '1998-02-11', 2, '016-6542-7546', 5, 5, 2520000, 160000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '김신제', '800709-1321456', '2003-08-08', 7, '010-2415-5444', 2, 8, 1950000, 180000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '임수봉', '810809-2121244', '2001-10-10', 6, '011-4151-4154', 1, 9, 890000 , 102000);
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '김신애', '810809-2111111', '2001-10-10', 6, '011-4151-4444', 1, 9, 900000 , 102000);
--==>> 1 행 이(가) 삽입되었습니다. * 60


--○ 확인
SELECT *
FROM TBL_EMP;
--==>> 1001~1060

SELECT COUNT(*) AS COUNT
FROM TBL_EMP;
--==>> 60

--○ 커밋
COMMIT;
--==>> 커밋 완료.

--------------------------------------------------------------------------------
--#20231123
-- ■■■ 문제 해결을 위한 쿼리문 준비 ■■■ --

-- 1. 지역 리스트 조회 쿼리문
SELECT CITY_NAME
FROM TBL_CITY;
--> 한 줄 구성
SELECT CITY_NAME FROM TBL_CITY
;


-- 2. 부서 리스트 조회 쿼리문
SELECT *
FROM TBL_BUSEO;
--> 한 줄 구성
SELECT * FROM TBL_BUSEO
;


-- 3. 직위 리스트 조회 쿼리문
SELECT JIKWI_NAME
FROM TBL_JIKWI;
--> 한 줄 구성
SELECT JIKWI_NAME FROM TBL_JIKWI
;


-- 4. 최소 기본급 조회 쿼리문
SELECT MIN_BASICPAY
FROM TBL_JIKWI
WHERE JIKWI_NAME='부장';
--> 한 줄 구성
SELECT MIN_BASICPAY FROM TBL_JIKWI WHERE JIKWI_NAME='부장'
;


-- 5. 데이터(직원 정보) 입력 쿼리문
FROM TBL_EMP;

INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '전용재', '800605-1456987', '2004-08-13', 7, '010-7549-8654', 3, 8, 1950000, 200000);
/*
**사용자에게 입력받는 대로 즉시 입력 쿼리문 실행 불가능
EX. 지역명('강원') 입력받음 -> 지역 ID(1)로 변환하여 입력 쿼리문 실행해야 함**
*/

-- 입력 쿼리문 재구성
SELECT CITY_ID FROM TBL_CITY WHERE CITY_NAME='서울';
SELECT BUSEO_ID FROM TBL_BUSEO WHERE BUSEO_NAME='개발부';
SELECT JIKWI_ID FROM TBL_JIKWI WHERE JIKWI_NAME='대리';
--                      ↓ 위의 쿼리문 이용해 재구성
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) 
VALUES (EMPSEQ.NEXTVAL, '채다선', '961023-2234567'
        , TO_DATE('2004-08-13', 'YYYY-MM-DD')
        , (SELECT CITY_ID FROM TBL_CITY WHERE CITY_NAME='서울')
        , '010-7549-8654'
        , (SELECT BUSEO_ID FROM TBL_BUSEO WHERE BUSEO_NAME='개발부')
        , (SELECT JIKWI_ID FROM TBL_JIKWI WHERE JIKWI_NAME='대리')
        , 1950000
        , 200000);
--> 한 줄 구성
INSERT INTO TBL_EMP (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) VALUES (EMPSEQ.NEXTVAL, '채다선', '961023-2234567', TO_DATE('2004-08-13', 'YYYY-MM-DD') , (SELECT CITY_ID FROM TBL_CITY WHERE CITY_NAME='서울'), '010-7549-8654', (SELECT BUSEO_ID FROM TBL_BUSEO WHERE BUSEO_NAME='개발부'), (SELECT JIKWI_ID FROM TBL_JIKWI WHERE JIKWI_NAME='대리'), 1950000, 200000)
;

-- 6. 전체 직원 수 출력 쿼리문
SELECT COUNT(*) AS COUNT
FROM TBL_EMP;
--> 한 줄 구성
SELECT COUNT(*) AS COUNT FROM TBL_EMP
;


-- 7. 전체 직원 리스트 조회 쿼리문
/*
**- 그냥 직원 리스트에서 조회하면 안됨. 입력 쿼리문과 같은 문제
실무적인 관점에서 보자면, 직원테이블 TBL_EMP를 LEFT JOIN으로 잡고 해야하지만,
쿼리가 길어지므로 우리는 그냥 JOIN으로 진행 되었음**
*/
--> 한 줄 구성
SELECT E.EMP_ID, E.EMP_NAME, E.SSN, TO_CHAR(E.IBSADATE, 'YYYY-MM-DD') AS IBSADATE
--** E.IBSADATE는 DB 설정에 따라 달라질 수 있으므로 TO_CHAR를 이용해 가져올 값만 필터**
    , C.CITY_NAME, E.TEL, B.BUSEO_NAME, J.JIKWI_NAME
    , E.BASICPAY, E.SUDANG
    , (E.BASICPAY + E.SUDANG) AS PAY
FROM TBL_EMP E, TBL_CITY C, TBL_BUSEO B, TBL_JIKWI J
WHERE E.CITY_ID = C.CITY_ID
  AND E.BUSEO_ID = B.BUSEO_ID
  AND E.JIKWI_ID = J.JIKWI_ID;


-- 7-1. 뷰 생성(EMPVIEW)
CREATE OR REPLACE VIEW EMPVIEW
AS
SELECT E.EMP_ID, E.EMP_NAME, E.SSN, TO_CHAR(E.IBSADATE, 'YYYY-MM-DD') AS IBSADATE
    , C.CITY_NAME, E.TEL, B.BUSEO_NAME, J.JIKWI_NAME
    , E.BASICPAY, E.SUDANG
    , (E.BASICPAY + E.SUDANG) AS PAY
FROM TBL_EMP E, TBL_CITY C, TBL_BUSEO B, TBL_JIKWI J
WHERE E.CITY_ID = C.CITY_ID
  AND E.BUSEO_ID = B.BUSEO_ID
  AND E.JIKWI_ID = J.JIKWI_ID;
--==>> View EMPVIEW이(가) 생성되었습니다.


-- 확인
SELECT EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_NAME
    , TEL, BUSEO_NAME, JIKWI_NAME
    , BASICPAY, SUDANG, PAY
FROM EMPVIEW;
--> 한 줄 구성
SELECT EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_NAME , TEL, BUSEO_NAME, JIKWI_NAME, BASICPAY, SUDANG, PAY FROM EMPVIEW
;



-- 8. 검색 직원 수 확인 쿼리문
SELECT COUNT(*) AS COUNT
FROM EMPVIEW
-- **TBL_EMP에서 찾아도 되지만, EMPVIEW 가 더 효과적이므로 EMPVIEW로 진행**
--WHERE EMP_ID=1001;
--WHERE EMP_NAME = '채다선';
--WHERE BUSEO_NAME = '개발부';
WHERE JIKWI_NAME = '대리';
--> 한 줄 구성
SELECT COUNT(*) AS COUNT FROM EMPVIEW WHERE JIKWI_NAME = '대리'
;


-- 9. 직원 전체 출력 쿼리문(사번/이름/부서/직위/급여내림차순)
-- 사번	이름	주민번호	입사일	지역	전화번호	부서	직위	기본급	수당	급여
SELECT EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_NAME
    , TEL, BUSEO_NAME, JIKWI_NAME
    , BASICPAY, SUDANG, PAY
FROM EMPVIEW
--ORDER BY EMP_ID;
--ORDER BY EMP_NAME;
--ORDER BY BUSEO_NAME;
--ORDER BY JIKWI_NAME;
ORDER BY PAY DESC;
--> 한 줄 구성
SELECT EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_NAME, TEL, BUSEO_NAME, JIKWI_NAME, BASICPAY, SUDANG, PAY FROM EMPVIEW ORDER BY PAY DESC;
;


-- 전화번호 없는 직원들을 위한 쿼리문 수정
SELECT EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_NAME, NVL(TEL,'번호없음') AS TEL, BUSEO_NAME, JIKWI_NAME, BASICPAY, SUDANG, PAY FROM EMPVIEW ORDER BY PAY DESC
;



-- 10. 직원 검색 쿼리문 (사번/이름/부서/직위)
SELECT EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_NAME
    , NVL(TEL,'번호없음') AS TEL, BUSEO_NAME, JIKWI_NAME, BASICPAY, SUDANG, PAY
FROM EMPVIEW
WHERE EMP_ID=1001;
--WHERE EMP_NAME = '채다선';
--WHERE BUSEO_NAME = '개발부';
--WHERE JIKWI_NAME = '대리';
--> 한 줄 구성
SELECT EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_NAME, NVL(TEL,'번호없음') AS TEL, BUSEO_NAME, JIKWI_NAME, BASICPAY, SUDANG, PAY FROM EMPVIEW WHERE EMP_ID=1001
;


-- 11. 직원 데이터 수정 쿼리문
UPDATE TBL_EMP
SET EMP_NAME='김경태', SSN='990511-1234567'
    , IBSADATE=TO_DATE('2021-07-20','YYYY-MM-DD')
    , CITY_ID=(SELECT CITY_ID FROM TBL_CITY WHERE CITY_NAME='제주')
    , TEL='010-2222-2222'
    , BUSEO_ID=(SELECT BUSEO_ID FROM TBL_BUSEO WHERE BUSEO_NAME='기획부')
    , JIKWI_ID=(SELECT JIKWI_ID FROM TBL_JIKWI WHERE JIKWI_NAME='과장')
    , BASICPAY=3000000
    , SUDANG=1000000
WHERE EMP_ID='1061';

UPDATE TBL_EMP SET EMP_NAME='김경태', SSN='990511-1234567', IBSADATE=TO_DATE('2021-07-20','YYYY-MM-DD'), CITY_ID=(SELECT CITY_ID FROM TBL_CITY WHERE CITY_NAME='제주'), TEL='010-2222-2222', BUSEO_ID=(SELECT BUSEO_ID FROM TBL_BUSEO WHERE BUSEO_NAME='기획부'), JIKWI_ID=(SELECT JIKWI_ID FROM TBL_JIKWI WHERE JIKWI_NAME='과장'), BASICPAY=3000000, SUDANG=1000000 WHERE EMP_ID='1061'
;
--==>> 1 행 이(가) 업데이트되었습니다.

SELECT *
FROM TBL_EMP;

COMMIT;
--==>> 커밋 완료.


-- 12. 직원 데이터 삭제 쿼리문
DELETE
FROM TBL_EMP
WHERE EMP_ID=1001;
--> 한 줄 구성
DELETE FROM TBL_EMP WHERE EMP_ID=1001
;

ROLLBACK;
--==>> 롤백 완료.

SELECT *
FROM EMPVIEW;

SELECT *
FROM TBL_EMP;

 

 

 

 

 

MemberDTO.java

 

/* ======================================
	MemberDTO.java
	- 데이터 보관 및 전송 전용 클래스
========================================*/
package com.test;

public class MemberDTO
{
	// 주요 속성 구성
	//-- 사번, 이름, 주민번호, 입사일, 지역, 전화번호
	//	, 부서, 직위, 기본급, 수당, 급여
	private int empId, basicPay, sudang, pay;
	private String empName, ssn, cityName, tel, buseoName, jikwiName;
	private String ibsadate;
	// ※ 입사일은 오라클에서 날짜 형식으로 처리되며...
	//		자바에서도 날짜 관련 객체 타입으로 처리될 수 있지만... 문자열로 구성
	
	// getter / setter
	public int getEmpId()
	{
		return empId;
	}
	public void setEmpId(int empId)
	{
		this.empId = empId;
	}
	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;
	}
	public String getEmpName()
	{
		return empName;
	}
	public void setEmpName(String empName)
	{
		this.empName = empName;
	}
	public String getSsn()
	{
		return ssn;
	}
	public void setSsn(String ssn)
	{
		this.ssn = ssn;
	}
	public String getCityName()
	{
		return cityName;
	}
	public void setCityName(String cityName)
	{
		this.cityName = cityName;
	}
	public String getTel()
	{
		return tel;
	}
	public void setTel(String tel)
	{
		this.tel = tel;
	}
	public String getBuseoName()
	{
		return buseoName;
	}
	public void setBuseoName(String buseoName)
	{
		this.buseoName = buseoName;
	}
	public String getJikwiName()
	{
		return jikwiName;
	}
	public void setJikwiName(String jikwiName)
	{
		this.jikwiName = jikwiName;
	}
	public String getIbsadate()
	{
		return ibsadate;
	}
	public void setIbsadate(String ibsadate)
	{
		this.ibsadate = ibsadate;
	}
	
	
}

 

 

 

MemberDAO.java

/* =========================================
	MemberDAO.java
	- 데이터베이스 액션 처리 전용 클래스
===========================================*/
package com.test;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import com.util.DBConn;

public class MemberDAO
{
	// 주요 속성 구성
	private Connection conn;
	
	// 데이터베이스 연결
	public Connection connection()
	{
		conn = DBConn.getConnection();
		return conn;
	}
	
	// 데이터베이스 연결 종료
	public void close()
	{
		DBConn.close();
	}
	
	// 직원 데이터 입력
	public int add(MemberDTO dto) throws SQLException
	{
		int result = 0;
		
		Statement stmt = conn.createStatement();
		// **5번 마지막 쿼리 참조**
		String sql = String.format("INSERT INTO TBL_EMP"
				+ " (EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID,"
				+ " TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG)"
				+ " VALUES (EMPSEQ.NEXTVAL, '%s', '%s', TO_DATE('%s', 'YYYY-MM-DD') "
				+ ", (SELECT CITY_ID FROM TBL_CITY WHERE CITY_NAME='%s'), '%s'"
				+ ", (SELECT BUSEO_ID FROM TBL_BUSEO WHERE BUSEO_NAME='%s')"
				+ ", (SELECT JIKWI_ID FROM TBL_JIKWI WHERE JIKWI_NAME='%s')"
				+ ", %d, %d)"
				, dto.getEmpName(), dto.getSsn(), dto.getIbsadate()
				, dto.getCityName(), dto.getTel()
				, dto.getBuseoName(), dto.getJikwiName()
				, dto.getBasicPay(), dto.getSudang());	
		//** String.format으로만 구성해야할 필요X -> +의 형태로도 가능하지만, 인지를 쉽게 하기 위해 String.format 사용
		
		result = stmt.executeUpdate(sql);
		stmt.close();
		
		return result;
	}
	
	
	
	// 전체 직원 수 조회
	public int memberCount() throws SQLException
	{
		// 반환할 결과 변수 선언 및 초기화
		int result = 0;
		
		// 작업 객체 생성
		Statement stmt = conn.createStatement();
		
		// 쿼리문 준비		// **6번 쿼리문 참조**
		String sql = "SELECT COUNT(*) AS COUNT FROM TBL_EMP";
		
		// 쿼리문 실행 -> select -> executeQuery() -> ResultSet 반환
		ResultSet rs = stmt.executeQuery(sql);
		
		// ResultSet 처리 -> 반복문 구성(단일값의 경우 조건문도 가능) -> 결과 수신
		while (rs.next())
		{
			result = rs.getInt("COUNT");
		}
		
		// 리소스 반납
		rs.close();
		stmt.close();
		
		// 최종 결과값 반환
		return result;
	}// end memberCount();
	
	
	
	// 검색 결과 직원 수 조회
	//	WHERE EMP_ID=1001;				-> key: EMP_ID		/ value: 1001
	//	WHERE EMP_NAME = '채다선';		-> key: EMP_NAME	/ value: '채다선'
	//	WHERE BUSEO_NAME = '개발부';	-> key: BUSEO_NAME	/ value: '개발부'
	//	WHERE JIKWI_NAME = '대리';		-> key: JIKWI_NAME	/ value: '대리'
	public int memberCount(String key, String value) throws SQLException
	{
		int result = 0;
		
		Statement stmt = conn.createStatement();
		String sql = "";
		
		// 쿼리문 준비		// **8번 쿼리문 참조**
		if(key.equals("EMP_ID"))
			sql = String.format("SELECT COUNT(*) AS COUNT FROM EMPVIEW WHERE %s = %s", key, value);	
		else
			sql = String.format("SELECT COUNT(*) AS COUNT FROM EMPVIEW WHERE %s = '%s'", key, value);			
		
		ResultSet rs = stmt.executeQuery(sql);
		while(rs.next())
		{
			result = rs.getInt("COUNT");
		}
		
		rs.close();
		stmt.close();
		
	
		return result;
	}
	
	// 직원 데이터 전체 정보 조회(사번/이름/부서/직위/급여내림차순)
	public ArrayList<MemberDTO> lists(String key) throws SQLException
	{
		// 반환할 결과값 선언 및 초기화
		ArrayList<MemberDTO> result = new ArrayList<MemberDTO>();
		
		// 작업 객체 생성
		Statement stmt = conn.createStatement();
		
		// 쿼리문 준비	// ** 9번 이후 전화번호 없는 쿼리문 참조**
		String sql = String.format("SELECT EMP_ID, EMP_NAME, SSN, IBSADATE"
				+ ", CITY_NAME, NVL(TEL,'번호없음') AS TEL"
				+ ", BUSEO_NAME, JIKWI_NAME"
				+ ", BASICPAY, SUDANG, PAY"
				+ " FROM EMPVIEW ORDER BY %s", key);
		
		// 쿼리문 실행
		ResultSet rs = stmt.executeQuery(sql);
		
		// RsultSet 처리 -> 반복문 구성
		while(rs.next())
		{
			// 한 개의 MemberDTO 생성 -> 비어있는 상태
			MemberDTO dto = new MemberDTO();
			
			// 생성된 MemberDTO 에 값 채워넣기 -> 값이 채워진 MemberDTO
			dto.setEmpId(rs.getInt("EMP_ID"));
			dto.setEmpName(rs.getString("EMP_NAME"));
			dto.setSsn(rs.getString("SSN"));
			dto.setIbsadate(rs.getString("IBSADATE"));
			dto.setCityName(rs.getString("CITY_NAME"));
			dto.setTel(rs.getString("TEL"));
			dto.setBuseoName(rs.getString("BUSEO_NAME"));
			dto.setJikwiName(rs.getString("JIKWI_NAME"));
			dto.setBasicPay(rs.getInt("BASICPAY"));
			dto.setSudang(rs.getInt("SUDANG"));
			dto.setPay(rs.getInt("PAY"));
			
			// ArryList 에 요소로 추가
			result.add(dto);			
			
		}
		
		// 리소스 반납
		rs.close();
		stmt.close();
		
		// 최종 결과값 반환
		return result;
	} // end lists(String key)
	
	
	
	// 직원 데이터 검색 조회 (사번/이름/부서/직위)
	public ArrayList<MemberDTO> searchLists(String key, String value) throws SQLException
	{
		ArrayList<MemberDTO> result = new ArrayList<MemberDTO>();
		
		Statement stmt = conn.createStatement();
		
		String sql ="";
		
		if(key.equals("EMP_ID"))
		{
			sql = String.format("SELECT EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_NAME"
					+ ", NVL(TEL,'번호없음') AS TEL"
					+ ", BUSEO_NAME, JIKWI_NAME"
					+ ", BASICPAY, SUDANG, PAY"
					+ " FROM EMPVIEW"
					+ " where %s=%s", key, value);
		}else
		{
			sql = String.format("SELECT EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_NAME"
					+ ", NVL(TEL,'번호없음') AS TEL"
					+ ", BUSEO_NAME, JIKWI_NAME"
					+ ", BASICPAY, SUDANG, PAY"
					+ " FROM EMPVIEW"
					+ " where %s='%s'", key, value);
		}
		
		
		ResultSet rs = stmt.executeQuery(sql);
		
		while(rs.next())
		{
			MemberDTO dto = new MemberDTO();
			
			dto.setEmpId(rs.getInt("EMP_ID"));
			dto.setEmpName(rs.getString("EMP_NAME"));
			dto.setSsn(rs.getString("SSN"));
			dto.setIbsadate(rs.getString("IBSADATE"));
			dto.setCityName(rs.getString("CITY_NAME"));
			dto.setTel(rs.getString("TEL"));
			dto.setBuseoName(rs.getString("BUSEO_NAME"));
			dto.setJikwiName(rs.getString("JIKWI_NAME"));
			dto.setBasicPay(rs.getInt("BASICPAY"));
			dto.setSudang(rs.getInt("SUDANG"));
			dto.setPay(rs.getInt("PAY"));
			
			result.add(dto);			
		}
		
		rs.close();
		stmt.close();
		
		return result;
	} //searchLists(String key, String value)
	
	// 지역 리스트 조회
	public ArrayList<String> searchCity() throws SQLException
	{
		ArrayList<String> result = new ArrayList<String>();
		
		Statement stmt = conn.createStatement();
		String sql = "SELECT CITY_NAME FROM TBL_CITY";
		ResultSet rs = stmt.executeQuery(sql);
		
		while(rs.next())
			result.add(rs.getString("CITY_NAME"));
		rs.close();
		stmt.close();		
		
		return result;
	}
	
	// 부서 리스트 조회
	public ArrayList<String> searchBuseo() throws SQLException
	{
		ArrayList<String> result = new ArrayList<String>();
		
		Statement stmt = conn.createStatement();
		String sql = "SELECT BUSEO_NAME FROM TBL_BUSEO";
		ResultSet rs = stmt.executeQuery(sql);
		
		while(rs.next())
			result.add(rs.getString("BUSEO_NAME"));
		rs.close();
		stmt.close();
		
		return result;
	}
	
	
	// 직위 리스트 조회
	public ArrayList<String> searchJikwi() throws SQLException
	{
		ArrayList<String> result = new ArrayList<String>();
		
		Statement stmt = conn.createStatement();
		String sql = "SELECT JIKWI_NAME FROM TBL_JIKWI";
		ResultSet rs = stmt.executeQuery(sql);
		
		while(rs.next())
			result.add(rs.getString("JIKWI_NAME"));
		rs.close();
		stmt.close();
		
		return result;
	}
	
	
	// 직위에 따른 최소 기본급 검색
	public int searchBasicPay(String jikwi) throws SQLException
	{
		int result = 0;
		
		Statement stmt = conn.createStatement();
		String sql = String.format("SELECT MIN_BASICPAY"
				+ " FROM TBL_JIKWI WHERE JIKWI_NAME='%s'", jikwi);
		ResultSet rs = stmt.executeQuery(sql);
		while(rs.next())
			result = rs.getInt("MIN_BASICPAY");
		rs.close();
		stmt.close();
		
		return result;
	}
	
	// 직원 데이터 수정
	public int modify(MemberDTO dto) throws SQLException
	{
		int result = 0;
		
		Statement stmt = conn.createStatement();
		
		String sql = String.format("UPDATE TBL_EMP"
				+ " SET EMP_NAME='%s', SSN='%s', IBSADATE=TO_DATE('%s','YYYY-MM-DD')"
				+ ", CITY_ID=(SELECT CITY_ID FROM TBL_CITY WHERE CITY_NAME='%s')"
				+ ", TEL='%s'"
				+ ", BUSEO_ID=(SELECT BUSEO_ID FROM TBL_BUSEO WHERE BUSEO_NAME='%s')"
				+ ", JIKWI_ID=(SELECT JIKWI_ID FROM TBL_JIKWI WHERE JIKWI_NAME='%s')"
				+ ", BASICPAY=%d, SUDANG=%d"
				+ " WHERE EMP_ID='%d'"
				, dto.getEmpName(), dto.getSsn(), dto.getIbsadate()
				, dto.getCityName(), dto.getTel()
				, dto.getBuseoName(), dto.getJikwiName()
				, dto.getBasicPay(), dto.getSudang()
				, dto.getEmpId() );
		
		result = stmt.executeUpdate(sql);
		stmt.close();
		
		return result;
	}
	
	// 직원 데이터 삭제
	public int remove(int empId) throws SQLException
	{
		int result = 0;
		
		Statement stmt = conn.createStatement();
		String sql = String.format("DELETE FROM TBL_EMP WHERE EMP_ID=%d", empId);
		result = stmt.executeUpdate(sql);
		stmt.close();
		
		return result;
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
}

 

 

 

 

MemberProcess.java

/* ============================================
	MemberProcess.java
	- 콘솔 기반 서브 메뉴 입출력 전용 클래스
==============================================*/
package com.test;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;

/*
1. 직원 정보 입력
2. 직원 전체 출력
	- 사번 정렬
	- 이름 정렬
	- 부서 정렬
	- 직위 정렬
	- 급여 내림차순 정렬
3. 직원 검색 출력
	- 사번 검색
	- 이름 검색
	- 부서 검색
	- 직위 검색
4. 직원 정보 수정
5. 직원 정보 삭제
*/
public class MemberProcess
{
	// 주요 속성 구성
	private MemberDAO dao;

	public MemberProcess(MemberDAO dao)
	{
		super();
		this.dao = dao;
	}
	
	// 생성자 정의(사용자정의 생성자)	
	//** 자동생성: 오른쪽 버튼 클릭 Source -> Generate Constructor useing Fields..
	public MemberProcess()
	{
		dao = new MemberDAO();
	}
	
	
	
	// 직원 정보 입력 메소드 정의
	public void memberInsert()
	{
		Scanner sc = new Scanner(System.in);
		
		try
		{
			// 데이터베이스 연결
			dao.connection();
			
			// 지역 리스트 구성
			ArrayList<String> citys = dao.searchCity();
			//** StringBuffer, StringBuilder: 계속 더해져서 길이가 달라지므로 사용
			StringBuilder cityStr = new StringBuilder();
			for(String city : citys)
				cityStr.append(city + "/");
			// 강원/경기/경남/경북/부산/서울/인천/전남/전북/제주/충남/충북/
			
			// 부서 리스트 구성
			ArrayList<String> buseos = dao.searchBuseo();
			StringBuilder buseoStr = new StringBuilder();
			for (String buseo : buseos)
				buseoStr.append(buseo + "/");
			// 개발부/기획부/영업부/인사부/자재부/총무부/홍보부/
			
			// 직위 리스트 구성
			ArrayList<String> jikwis = dao.searchJikwi();
			StringBuilder jikwiStr = new StringBuilder();
			for(String jikwi : jikwis)
				jikwiStr.append(jikwi + "/");
			
			// 사용자에게 보여지는 화면 처리
			/*
			직원 정보 입력 --------------------------------------------------------
			ㄴ 이름: 채다선
			ㄴ 주민등록번호(yymmdd-nnnnnnn): 961023-2234567
			ㄴ 입사일(yyyy-mm-dd): 2019-06-08
			ㄴ 지역(강원/경기/경남/경북/부산/서울/인천/전남/전북/제주/충남/충북/):	경기	// **테이블 지역 기반으로 출력**
			ㄴ 전화번호: 010-1111-1111
			ㄴ 부서(개발부/기획부/영업부/인사부/자재부/총무부/홍보부/): 개발부
			ㄴ 직위(사장/전무/상무/이사/부장/차장/과장/대리/사원/): 대리 
			ㄴ 기본급(최소 1800000 이상): 2500000
			ㄴ 수당: 1000000
			
			직원 정보 입력 완료~!!!
			*/
			
			System.out.println("직원 정보 입력 --------------------------------------------------------");
			System.out.print("이름: ");
			String empName = sc.next();
			System.out.print("주민등록번호(yymmdd-nnnnnnn): ");
			String ssn = sc.next();
			System.out.print("입사일(yyyy-mm-dd): ");
			String ibsaDate = sc.next();
			System.out.printf("지역(%s): ", cityStr.toString());
			String cityName = sc.next();
			System.out.print("전화번호: ");
			String tel = sc.next();
			System.out.printf("부서(%s): ", buseoStr.toString());
			String buseoName = sc.next();
			System.out.printf("직위(%s): ", jikwiStr.toString());
			String jikwiName = sc.next();
			System.out.printf("기본급(최소 %d 이상): ", dao.searchBasicPay(jikwiName));
			int basicPay = sc.nextInt();
			// **기본급 이상이 맞는지 확인하는 유효성검사는 나중에**
			System.out.print("수당: ");
			int sudang = sc.nextInt();
			
			MemberDTO dto = new MemberDTO();
			dto.setEmpName(empName);
			dto.setSsn(ssn);
			dto.setIbsadate(ibsaDate);
			dto.setCityName(cityName);
			dto.setTel(tel);
			dto.setBuseoName(buseoName);
			dto.setJikwiName(jikwiName);			
			dto.setBasicPay(basicPay);
			
			int result = dao.add(dto);
			if(result >0)
				System.out.println("직원 정보 입력 완료~!!!");
			
			System.out.println("-----------------------------------------------------------------------------------");
			
			
		} catch (Exception e)
		{
			System.out.println(e.toString());
		}
		finally
		{
			try
			{
				dao.close();
			} catch (Exception e)
			{
				System.out.println(e.toString());
			}
		}
	}
	
	
	
	// 직원 전체 출력 메소드 정의
	public void memberLists()
	{
		Scanner sc = new Scanner(System.in);
		
		// 서브 메뉴 출력(안내)
		System.out.println();
		System.out.println("1. 사번 정렬");				// EMP_ID
		System.out.println("2. 이름 정렬");				// EMP_NAME
		System.out.println("3. 부서 정렬");				// BUSEO_NAME
		System.out.println("4. 직위 정렬");				// JIKWI_NAME
		System.out.println("5. 급여 내림차순 정렬");	// PAY DESC
		System.out.println(">> 선택(1~5, -1 종료): ");
		String menuStr = sc.next();
		
		try
		{
			int menu = Integer.parseInt(menuStr);
			if (menu == -1)
				return;
			// **구문의 관계와 구조에 따라 break (X) -> return (O)
			
			String key = "";
			
			switch (menu)
			{
				case 1:
					key = "EMP_ID";
					break;
				case 2:
					key = "EMP_NAME";
					break;
				case 3:
					key = "BUSEO_NAME";
					break;
				case 4:
					key = "JIKWI_NAME";
					break;
				case 5:
					key = "PAY DESC";
					break;
			}

			// 데이터베이스 연결
			dao.connection();
			
			// 직원 리스트 출력
			System.out.println();
			System.out.printf("전체 인원: %d 명\n", dao.memberCount());
			System.out.println("사번	이름	주민번호	입사일	지역	전화번호	부서	직위	기본급	수당	급여");
			
			ArrayList<MemberDTO> memList = dao.lists(key);
			if(memList.size() > 0)
			{
				for (MemberDTO dto: memList)
				{
					System.out.printf("%5d %4s %14s %10s %4s %12s %4s %3s %8d %8d %8d\n"
							, dto.getEmpId(), dto.getEmpName()
							, dto.getSsn(), dto.getIbsadate()
							, dto.getCityName(), dto.getTel()
							, dto.getBuseoName(), dto.getJikwiName()
							, dto.getBasicPay(), dto.getPay(), dto.getPay());
				}
			}
			else {
				
				System.out.println("");
				System.out.println("");
				System.out.println("");
				System.out.println("");
				System.out.println("");
				System.out.println("");
				System.out.println("");
			}
			
		} catch (Exception e)
		{
			System.out.println(e.toString());
		}
		finally
		{
			try
			{
				dao.close();
			} catch (Exception e)
			{
				System.out.println(e.toString());
			}
		}
		
		
	}
	/*
	1. 사번 검색
	2. 이름 검색
	3. 부서 검색
	4. 직위 검색
	>> 선택(1~4, -1 종료):
	*/
	
	// 직원 검색 출력 메소드 정의
	public void memberSearch()
	{
		System.out.println("1. 사번 검색          ");
		System.out.println("2. 이름 검색          ");
		System.out.println("3. 부서 검색          ");
		System.out.println("4. 직위 검색          ");
		System.out.println(">> 선택(1~4, -1 종료): ");
		
		
		try
		{
			Scanner sc = new Scanner(System.in);
			dao.connection();
			int searchMenu = sc.nextInt();
			
			if(searchMenu == -1)
				return;
			
			switch (searchMenu)
			{
				case 1:
					System.out.print("검색할 사번을 입력하세요 : ");
					String searchEmpId = sc.next();
					ArrayList<MemberDTO> arrayList = dao.searchLists("EMP_ID", searchEmpId);
					
					if (arrayList.size() > 0)
					{
						for (MemberDTO dto : arrayList)
						{
							System.out.printf("%5d %4s %14s %10s %4s %12s %4s %3s %8d %8d %8d\n"
									, dto.getEmpId(), dto.getEmpName()
									, dto.getSsn(), dto.getIbsadate()
									, dto.getCityName(), dto.getTel()
									, dto.getBuseoName(), dto.getJikwiName()
									, dto.getBasicPay(), dto.getPay(), dto.getPay());
						}
						
					}
					else
					{
						System.out.println("입력하신 사번에 해당하는 직원 데이터가 존재하지 않습니다.");
					}
				
					break;
					
				// 이름
				case 2:
					
					System.out.print("검색할 이름을 입력하세요 : ");
					String searchName = sc.next();
					ArrayList<MemberDTO> arrayList2 = dao.searchLists("EMP_NAME", searchName);
					
					if (arrayList2.size() > 0)
					{
						for (MemberDTO dto : arrayList2)
						{
							System.out.printf("%5d %4s %14s %10s %4s %12s %4s %3s %8d %8d %8d\n"
									, dto.getEmpId(), dto.getEmpName()
									, dto.getSsn(), dto.getIbsadate()
									, dto.getCityName(), dto.getTel()
									, dto.getBuseoName(), dto.getJikwiName()
									, dto.getBasicPay(), dto.getPay(), dto.getPay());
						}
						
					}
					else
					{
						System.out.println("입력하신 사번에 해당하는 직원 데이터가 존재하지 않습니다.");
					}
					
					break;
					
				// 부서
				case 3:
					
					System.out.print("검색할 부서를 입력하세요 : ");
					String searchBuseo = sc.next();
					ArrayList<MemberDTO> arrayList3 = dao.searchLists("BUSEO_NAME", searchBuseo);
					
					if (arrayList3.size() > 0)
					{
						for (MemberDTO dto : arrayList3)
						{
							System.out.printf("%5d %4s %14s %10s %4s %12s %4s %3s %8d %8d %8d\n"
									, dto.getEmpId(), dto.getEmpName()
									, dto.getSsn(), dto.getIbsadate()
									, dto.getCityName(), dto.getTel()
									, dto.getBuseoName(), dto.getJikwiName()
									, dto.getBasicPay(), dto.getPay(), dto.getPay());
						}
						
					}
					else
					{
						System.out.println("입력하신 부서에 해당하는 직원 데이터가 존재하지 않습니다.");
					}
					
					break;
					
				// 직위
				case 4:
					System.out.print("검색할 직위를 입력하세요 : ");
					String searchJikwi = sc.next();
					ArrayList<MemberDTO> arrayList4 = dao.searchLists("JIKWI_NAME", searchJikwi);
					
					if (arrayList4.size() > 0)
					{
						for (MemberDTO dto : arrayList4)
						{
							System.out.printf("%5d %4s %14s %10s %4s %12s %4s %3s %8d %8d %8d\n"
									, dto.getEmpId(), dto.getEmpName()
									, dto.getSsn(), dto.getIbsadate()
									, dto.getCityName(), dto.getTel()
									, dto.getBuseoName(), dto.getJikwiName()
									, dto.getBasicPay(), dto.getPay(), dto.getPay());
						}
						
					}
					else
					{
						System.out.println("입력하신 사번에 해당하는 직원 데이터가 존재하지 않습니다.");
					}
					
					break;

			}
			
			dao.close();
			
		} catch (Exception e)
		{
			System.out.println(e.toString());
		}
		
	}
	
	public void memberSearch2() throws SQLException
	{
		Scanner sc = new Scanner(System.in);
		
		
		// 서브 메뉴 구성
		System.out.println("1. 사번 검색");				// EMP_ID
		System.out.println("2. 이름 검색");				// EMP_NAME
		System.out.println("3. 부서 검색");				// BUSEO_NAME
		System.out.println("4. 직위 검색");				// JIKWI_NAME
		System.out.println(">> 선택(1~4, -1 종료):");
		
		String menuStr = sc.next();
		String key = "";
		String value = "";
		
		try
		{
			int menu = Integer.parseInt(menuStr);
			
			
			switch (menu)
			{
				case 1 :
					key = "EMP_ID";
					System.out.print("검색할 사번 입력 : ");
					value = sc.next();
					break;
				case 2 :
					key = "EMP_NAME";
					System.out.print("검색할 사원명 입력 : ");
					value = sc.next();
					break;
				case 3 :
					key = "BUSEO_NAME";
					System.out.print("검색할 부서명 입력 : ");
					value = sc.next();
					break;
				case 4 :
					key = "JIKWI_NAME";
					System.out.print("검색할 직위명 입력 : ");
					value = sc.next();
					break;
			}
			
			
			
			
		} catch (Exception e)
		{
			System.out.println(e.toString());
		}
		
		
		// 데이터베이스 연결
		dao.connection();
		
		// 검색 결과 출력
		ArrayList<MemberDTO> arrayList = dao.searchLists(key, value);
		
		if(arrayList.size() > 0)
		{

			System.out.println();
			System.out.printf("검색 인원 : %d명\n", dao.memberCount(key, value));
			System.out.println("사번	이름	주민번호	입사일	지역	전화번호	부서	직위	기본급	수당	급여");
			
			for (MemberDTO dto : arrayList)
			{
				System.out.printf("%5d %4s %14s %10s %4s %12s %4s %3s %8d %8d %8d\n"
						, dto.getEmpId(), dto.getEmpName()
						, dto.getSsn(), dto.getIbsadate()
						, dto.getCityName(), dto.getTel()
						, dto.getBuseoName(), dto.getJikwiName()
						, dto.getBasicPay(), dto.getPay(), dto.getPay());
			}
			
		}
		else
		{
			System.out.println("입력하신 값에 해당하는 데이터가 존재하지 않습니다.");
		}

		
	}
	
	
	
	// 직원 정보 수정 메소드 정의
	public void memberUpdate()
	{
		Scanner sc = new Scanner(System.in);
		
		try
		{
			// 수정할 대상 입력받기
			System.out.print("수정할 직원의 사원번호 입력 : ");
			String value = sc.next();
			
			// 데이터베이스 연결
			dao.connection();
			
			ArrayList<MemberDTO> memList = dao.searchLists("EMP_ID", value);
			
			if (memList.size() > 0)
			{
				// 수정 대상을 찾은 경우...
				
				// 지역 리스트 구성
				ArrayList<String> citys = dao.searchCity();
				//** StringBuffer, StringBuilder: 계속 더해져서 길이가 달라지므로 사용
				StringBuilder cityStr = new StringBuilder();
				for(String city : citys)
					cityStr.append(city + "/");
				// "강원/경기/경남/경북/부산/서울/인천/전남/전북/제주/충남/충북/"
				
				// 부서 리스트 구성
				ArrayList<String> buseos = dao.searchBuseo();
				StringBuilder buseoStr = new StringBuilder();
				for (String buseo : buseos)
					buseoStr.append(buseo + "/");
				// "개발부/기획부/영업부/인사부/자재부/총무부/홍보부/"
				
				// 직위 리스트 구성
				ArrayList<String> jikwis = dao.searchJikwi();
				StringBuilder jikwiStr = new StringBuilder();
				for(String jikwi : jikwis)
					jikwiStr.append(jikwi + "/");
				// "개발부/기획부/영업부/인사부/자재부/총무부/홍보부/"
				
				
				// 사용자에게 보여지는 화면 처리
				/*
				직원 정보 수정 --------------------------------------------------------
				기존 이름 : 채다선
				수정 이름 : -
				기존 주민등록번호(yymmdd-nnnnnnn) : 961023-2234567
				수정 주민등록번호(yymmdd-nnnnnnn) : -
				기존 입사일(yyyy-mm-dd) : 2019-06-08
				수정 입사일(yyyy-mm-dd) : 2020-11-24
				기존 지역 : 경기
				수정 지역(강원/경기/경남/경북/부산/서울/인천/전남/전북/제주/충남/충북/):
				기존 전화번호 : 010-1111-1111
				수정 전화번호 : -
				기존 부서 : 개발부
				수정 부서(개발부/기획부/영업부/인사부/자재부/총무부/홍보부/) : -
				기존 직위 : 대리
				수정 직위(사장/전무/상무/이사/부장/차장/과장/대리/사원/) : -  
				기존 기본급 : 2500000
				수정 기본급(최소 1800000원 이상) : 3000000
				기존 수당 : 1000000
				수정 수당 : -
				
				 직원 정보 수정 완료~!!!
				----------------------------------------------------------------------- 직원 정보 수정
				*/
				// 기존 이름
				// 기존 주민등록번호
				// 기존 입사일
				// 기존 지역
				// 기존 전화번호
				// 기존 부서
				// 기존 직위
				// 기존 기본급
				// 기존 수당
				
				System.out.println("직원 정보 수정 --------------------------------------------------------");
				for (MemberDTO dto : memList)
				{
					System.out.printf("기존 이름 : %s", dto.getEmpName());
					System.out.print("\n수정 이름 : ");
					String upName = sc.next();
					if (upName.equals("-"))
						upName = dto.getEmpName();
					
					System.out.printf("기존 주민등록번호(yymmdd-nnnnnnn) : %s", dto.getSsn());
					System.out.print("\n수정 주민등록번호(yymmdd-nnnnnnn) : ");
					String upSsn = sc.next();
					if (upSsn.equals("-"))
						upSsn = dto.getSsn();
					
					System.out.printf("기존 입사일(yyyy-mm-dd) : %s", dto.getIbsadate());
					System.out.print("\n수정 입사일(yyyy-mm-dd) : ");
					String upIbsaDate = sc.next();
					if (upSsn.equals("-"))
						upSsn = dto.getSsn();
					
					System.out.printf("기존 지역 : %s", dto.getCityName());
					System.out.printf("\n수정 지역(%s): ", cityStr.toString());
					String upCityName = sc.next();
					if (upSsn.equals("-"))
						upSsn = dto.getSsn();
					
					System.out.printf("기존 전화번호 : %s", dto.getTel());
					System.out.print("\n수정 전화번호 : ");
					String upTel = sc.next();
					if (upSsn.equals("-"))
						upSsn = dto.getSsn();
					
					System.out.printf("기존 부서 : %s", dto.getBuseoName());
					System.out.printf("\n수정 부서(%s): ", buseoStr.toString());
					String upBuseoName = sc.next();
					if (upSsn.equals("-"))
						upSsn = dto.getSsn();
					
					System.out.printf("기존 직위 : %s", dto.getJikwiName());
					System.out.printf("\n수정 직위(%s): ", jikwiStr.toString());
					String upJikwiName = sc.next();
					if (upSsn.equals("-"))
						upSsn = dto.getSsn();
					
					System.out.printf("기존 기본급 : %s", dto.getBasicPay());
					System.out.printf("\n수정 기본급(최소 %d 이상) : ", dao.searchBasicPay(upJikwiName));
					int upBasicPay = sc.nextInt();
					if (upSsn.equals("-"))
						upSsn = dto.getSsn();
					
					System.out.printf("기존 수당 : %s", dto.getSudang());
					System.out.print("\n수정 수당 : ");
					int upSudang = sc.nextInt();
					if (upSsn.equals("-"))
						upSsn = dto.getSsn();
					
					
					MemberDTO upDto = new MemberDTO();
					
					upDto.setEmpId(Integer.parseInt(value));
					upDto.setEmpName(upName);
					upDto.setSsn(upSsn);
					upDto.setIbsadate(upIbsaDate);
					upDto.setCityName(upCityName);
					upDto.setTel(upTel);
					upDto.setBuseoName(upBuseoName);
					upDto.setJikwiName(upJikwiName);
					upDto.setBasicPay(upBasicPay);
					upDto.setSudang(upSudang);
					
					int result= dao.modify(upDto);
					
					
					if (result > 0)
					{
						System.out.println("직원 정보 수정 완료~!!!");
					}
					System.out.println("----------------------------------------------------------------------- 직원 정보 수정");
				}
				
				
			}
			else
			{
				System.out.println("수정 대상을 검색하지 못했습니다.");
			}
			
			
		} catch (Exception e)
		{
			System.out.println(e.toString());
		}
	}
	
	
	public void memberUpdate2()
	{
		Scanner sc = new Scanner(System.in);
		
		try
		{
			// 수정할 대상 입력받기
			System.out.print("수정할 직원의 사원번호 입력 : ");
			String value = sc.next();
			
			// 데이터베이스 연결
			dao.connection();
			
			ArrayList<MemberDTO> memList = dao.searchLists("EMP_ID", value);
			
			
			if (memList.size() > 0)
			{
				// 수정 대상을 찾은 경우...
				
				// 지역 리스트 구성
				ArrayList<String> citys = dao.searchCity();
				//** StringBuffer, StringBuilder: 계속 더해져서 길이가 달라지므로 사용
				StringBuilder cityStr = new StringBuilder();
				for(String city : citys)
					cityStr.append(city + "/");
				// "강원/경기/경남/경북/부산/서울/인천/전남/전북/제주/충남/충북/"
				
				// 부서 리스트 구성
				ArrayList<String> buseos = dao.searchBuseo();
				StringBuilder buseoStr = new StringBuilder();
				for (String buseo : buseos)
					buseoStr.append(buseo + "/");
				// "개발부/기획부/영업부/인사부/자재부/총무부/홍보부/"
				
				// 직위 리스트 구성
				ArrayList<String> jikwis = dao.searchJikwi();
				StringBuilder jikwiStr = new StringBuilder();
				for(String jikwi : jikwis)
					jikwiStr.append(jikwi + "/");
				// "개발부/기획부/영업부/인사부/자재부/총무부/홍보부/"
				
				
				// 사용자에게 보여지는 화면 처리
				/*
				직원 정보 수정 --------------------------------------------------------
				기존 이름 : 채다선
				수정 이름 : -
				기존 주민등록번호(yymmdd-nnnnnnn) : 961023-2234567
				수정 주민등록번호(yymmdd-nnnnnnn) : -
				기존 입사일(yyyy-mm-dd) : 2019-06-08
				수정 입사일(yyyy-mm-dd) : 2020-11-24
				기존 지역 : 경기
				수정 지역(강원/경기/경남/경북/부산/서울/인천/전남/전북/제주/충남/충북/):
				기존 전화번호 : 010-1111-1111
				수정 전화번호 : -
				기존 부서 : 개발부
				수정 부서(개발부/기획부/영업부/인사부/자재부/총무부/홍보부/) : -
				기존 직위 : 대리
				수정 직위(사장/전무/상무/이사/부장/차장/과장/대리/사원/) : -  
				기존 기본급 : 2500000
				수정 기본급(최소 1800000원 이상) : 3000000
				기존 수당 : 1000000
				수정 수당 : -
				
				 직원 정보 수정 완료~!!!
				----------------------------------------------------------------------- 직원 정보 수정
				*/
				
				
				MemberDTO mMember = memList.get(0);
				
				int mEmpId = mMember.getEmpId();
				String mEmpName = mMember.getEmpName();
				String mSsn = mMember.getSsn();
				String mIbsaDate = mMember.getIbsadate();
				String mCityName = mMember.getCityName();
				String mTel = mMember.getTel();
				String mBuseoName = mMember.getBuseoName();
				String mJikwiName = mMember.getJikwiName();
				int mBasicPay = mMember.getBasicPay();
				int mSudang = mMember.getSudang();
				
				if (mMember != null)
				{
					System.out.println();
					System.out.println("직원 정보 수정 --------------------------------------------------------");
					
					System.out.printf("기존 이름 : %s\n", mEmpName);
					System.out.print("수정 이름 : ");
					String empName = sc.next();
					if (empName.equals("-"))
						empName = mEmpName;
					
					System.out.printf("기존 주민등록번호(yymmdd-nnnnnnn) : %s\n", mSsn);
					System.out.print("수정 주민등록번호(yymmdd-nnnnnnn) : ");
					String ssn = sc.next();
					if (ssn.equals("-"))
						ssn = mSsn;
					
					
					System.out.printf("기존 입사일(yyyy-mm-dd) : %s\n", mIbsaDate);
					System.out.print("수정 입사일(yyyy-mm-dd) : ");
					String ibsaDate = sc.next();
					if (ibsaDate.equals("-"))
						ibsaDate = mIbsaDate;
					
					System.out.printf("기존 지역 : %s\n", mCityName);
					System.out.printf("수정 지역(%s) : ", cityStr.toString());
					String cityName = sc.next();
					if (cityName.equals("-"))
						cityName = mCityName;
					
					
					System.out.printf("기존 전화번호 : %s\n", mTel);
					System.out.print("수정 전화번호 : ");
					String tel = sc.next();
					if (tel.equals("-"))
						tel = mTel;
					
					
					System.out.printf("기존 부서 : %s\n", mBuseoName);
					System.out.printf("수정 부서(%s) : ", buseoStr.toString());
					String buseoName = sc.next();
					if (buseoName.equals("-"))
						buseoName = mBuseoName;
					
					System.out.printf("기존 직위 : %s\n", mJikwiName);
					System.out.printf("수정 직위(%s) : ", jikwiStr.toString());
					String jikwiName = sc.next();
					if (jikwiName.equals("-"))
						jikwiName = mJikwiName;
					
					System.out.printf("기존 기본급 : %d\n", mBasicPay);
					System.out.printf("수정 기본급(최소 %d원 이상) : ", dao.searchBasicPay(jikwiName));
					// 사용자가 입력하는 값 int형!
					// ★[주의!!!!!!!!!!!!!!!!]※※※※※※※※※※※※※※※※※※※※※※※※※
					// ※ int basicPay = sc.nextInt()
					// ※ int형만 입력받을 수 있으므로
					// ※ 사용자가 "-"를 입력했을 때 문제가 발생한다! (이 부분을 생각못함...ㅠㅠ)
					// ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
			
					String basicPayStr = sc.next();
					int basicPay = 0;
					
					if (basicPayStr.equals("-"))
						basicPay = mBasicPay;
					else
						basicPay = Integer.parseInt(basicPayStr);
					
					
					System.out.printf("기존 수당 : %d\n", mSudang);
					System.out.print("수정 수당 : ");
					String sudangStr = sc.next();
					int sudang = 0;
					if (sudangStr.equals("-"))
						sudang = mSudang;
					else
						sudang = Integer.parseInt(sudangStr);
					
					// 새로 입력받으(수정한) 내용을 통해 DTO 구성
					MemberDTO member = new MemberDTO();
					
		
					
					// 사용자가 사원번호로 검색한(value) 이전 데이터의
					// 사원 번호 mEmpId에 해당하는 데이터를 수정해야 하기 때문에
					// 새롭게 생성한 DTO 객체에 이전의 사원번호 mEmpId를 set해 준다!!
					
					member.setEmpId(mEmpId);				// check~!!
					member.setEmpName(empName);
					member.setSsn(ssn);
					member.setIbsadate(ibsaDate);
					member.setCityName(cityName);
					member.setTel(tel);
					member.setBuseoName(buseoName);
					member.setJikwiName(jikwiName);
					member.setBasicPay(basicPay);
					member.setSudang(sudang);
					
					int result = dao.modify(member);
					
					if (result > 0)
					{
						System.out.println("직원 수정이 완료되었습니다.");
					}
					
				}
				else
				{
					System.out.println("수정 대상을 찾지 못했습니다.");
				}
				
			}
		}
		catch (Exception e)
		{
			System.out.println(e.toString());
		}
		finally
		{
			try
			{
				dao.close();
				
			} catch (Exception e)
			{
				System.out.println(e.toString());
			}
		}
	
	}
	
	
	
	
	// 직원 정보 삭제 메소드 정의
	public void memberDelete()
	{
		Scanner sc = new Scanner(System.in);
		
		try
		{
			System.out.print("삭제할 직원의 사원번호 입력 : ");
			String value = sc.next();
			
			// 사용자가 입력한 직원의 사원번호에 대한 유효성 검사 코드 삽입 가능~!!!
			
			// 직원 정보 확인 후 삭제 여부 결정
			
			// 데이터베이스 연결
			
			dao.connection();
			
			ArrayList<MemberDTO> members = dao.searchLists("EMP_ID", value);
			
			if (members.size() > 0)
			{
				// 삭제할 대상 확인
				System.out.println();
				System.out.println("사번	이름	주민번호	입사일	지역	전화번호	부서	직위	기본급	수당	급여");
				for (MemberDTO dto : members)
				{
					System.out.printf("%5d %4s %14s %10s %4s %12s %4s %3s %8d %8d %8d\n"
							, dto.getEmpId(), dto.getEmpName()
							, dto.getSsn(), dto.getIbsadate()
							, dto.getCityName(), dto.getTel()
							, dto.getBuseoName(), dto.getJikwiName()
							, dto.getBasicPay(), dto.getPay(), dto.getPay());
				}
				
				// 삭제 여부 결정 및 처리
				System.out.println("\n정말 삭제하시겠습니까? (Y/N) : ");
				String response = sc.next();
				
				if (response.equals("Y") || response.equals("y"))
				{
					int result = dao.remove(Integer.parseInt(value));
					if (result > 0)
						System.out.println("직원 정보가 정상적으로 삭제되었습니다.");
				}
			}
			else
			{
				System.out.println("삭제 대상을 찾지 못했습니다.");
				
			}
			
			
		} catch (Exception e)
		{
			System.out.println(e.toString());
		}
		finally
		{
			try
			{
				dao.close();
				
			} catch (Exception e)
			{
				System.out.println(e.toString());
			}
		}
	
	}// end memberDelete()
	
}

 

 

 

 

MemberMain.java

 

/* =====================
	MemberMain.java
======================*/
/*
○ 직원 관리 프로그램을 구현한다.
	- 데이터베이스 연동 프로그램으로 작성한다.
	- MemberDTO, MemberDAO 를 활용한다.
	- 메뉴 구성 및 기능을 구현한다. -> MemberProcess 단위업무 구성
	
실행 예)



=====[ 직원 관리 ]======
1. 직원 정보 입력
2. 직원 전체 출력
	- 사번 정렬
	- 이름 정렬
	- 부서 정렬
	- 직위 정렬
	- 급여 내림차순 정렬
3. 직원 검색 출력
	- 사번 검색
	- 이름 검색
	- 부서 검색
	- 직위 검색
4. 직원 정보 수정
5. 직원 정보 삭제
========================
>> 메뉴 선택(1~5, -1 종료): 1

직원 정보 입력 --------------------------------------------------------
ㄴ 이름: 채다선
ㄴ 주민등록번호(yymmdd-nnnnnnn): 961023-2234567
ㄴ 입사일(yyyy-mm-dd): 2019-06-08
ㄴ 지역(강원/경기/경남/경북/부산/서울/인천/전남/전북/제주/충남/충북/):	경기	// **테이블 지역 기반으로 출력**
ㄴ 전화번호: 010-1111-1111
ㄴ 부서(개발부/기획부/영업부/인사부/자재부/총무부/홍보부/): 개발부
ㄴ 직위(사장/전무/상무/이사/부장/차장/과장/대리/사원/): 대리 
ㄴ 기본급(최소 1800000 이상): 2500000
ㄴ 수당: 1000000

직원 정보 입력 완료~!!!
----------------------------------------------------------------------- 직원 정보 입력



=====[ 직원 관리 ]======
1. 직원 정보 입력
2. 직원 전체 출력
	- 사번 정렬
	- 이름 정렬
	- 부서 정렬
	- 직위 정렬
	- 급여 내림차순 정렬
3. 직원 검색 출력
	- 사번 검색
	- 이름 검색
	- 부서 검색
	- 직위 검색
4. 직원 정보 수정
5. 직원 정보 삭제
========================
>> 메뉴 선택(1~5, -1 종료): 2

1. 사번 정렬
2. 이름 정렬
3. 부서 정렬
4. 직위 정렬
5. 급여 내림차순 정렬
>> 선택(1~5, -1 종료): -1



=====[ 직원 관리 ]======
1. 직원 정보 입력
2. 직원 전체 출력
	- 사번 정렬
	- 이름 정렬
	- 부서 정렬
	- 직위 정렬
	- 급여 내림차순 정렬
3. 직원 검색 출력
	- 사번 검색
	- 이름 검색
	- 부서 검색
	- 직위 검색
4. 직원 정보 수정
5. 직원 정보 삭제
========================
>> 메뉴 선택(1~5, -1 종료): 2

1. 사번 정렬
2. 이름 정렬
3. 부서 정렬
4. 직위 정렬
5. 급여 내림차순 정렬
>> 선택(1~5, -1 종료): 1

전체 인원: xx 명
사번	이름	주민번호	입사일	지역	전화번호	부서	직위	기본급	수당	급여
1001
 :
1060



=====[ 직원 관리 ]======
1. 직원 정보 입력
2. 직원 전체 출력
	- 사번 정렬
	- 이름 정렬
	- 부서 정렬
	- 직위 정렬
	- 급여 내림차순 정렬
3. 직원 검색 출력
	- 사번 검색
	- 이름 검색
	- 부서 검색
	- 직위 검색
4. 직원 정보 수정
5. 직원 정보 삭제
========================
>> 메뉴 선택(1~5, -1 종료): 3

1. 사번 검색
2. 이름 검색
3. 부서 검색
4. 직위 검색
>> 선택(1~4, -1 종료): 1

검색할 사번 입력: ...




=====[ 직원 관리 ]======
1. 직원 정보 입력
2. 직원 전체 출력
	- 사번 정렬
	- 이름 정렬
	- 부서 정렬
	- 직위 정렬
	- 급여 내림차순 정렬
3. 직원 검색 출력
	- 사번 검색
	- 이름 검색
	- 부서 검색
	- 직위 검색
4. 직원 정보 수정
5. 직원 정보 삭제
========================
>> 메뉴 선택(1~5, -1 종료): -1

프로그램이 종료되었습니다.

*/

package com.test;

import java.sql.SQLException;
import java.util.Scanner;

public class MemberMain
{
	public static void main(String[] args) throws SQLException
	{
		Scanner sc = new Scanner(System.in);
		MemberDTO dto = new MemberDTO();
		MemberProcess prc = new MemberProcess();
		
		// 직원 정보 입력 메소드
		//prc.memberInsert();
		
		// 직원 정보 전체 출력 메소드
		//prc.memberLists();
		
		// 직원 정보 검색 메소드
		//prc.memberSearch2();
		
		// 직원 정보 업데이트 메소드
		//prc.memberUpdate2();
		
		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("4. 직원 정보 수정");
			System.out.println("5. 직원 정보 삭제");
			System.out.println("======================");
			System.out.println(">> 메뉴 선택(1~5, -1 종료): ");
			
			String menuStr = sc.next();
			
			try
			{
				int menu = Integer.parseInt(menuStr);
				
				if (menu == -1)
					break;
				
				switch (menu)
				{
					case 1:
						// 직원 정보 입력 메소드 호출
						prc.memberInsert();
						break;
						
					case 2:
						// 직원 전체 출력 메소드 호출
						prc.memberLists();
						break;
					
					case 3:
						// 직원 검색 출력 메소드 호출
						prc.memberSearch();
						break;
					
					case 4:
						// 직원 정보 수정 메소드 호출
						prc.memberUpdate();
						break;
					
					case 5:
						// 직원 정보 삭제 메소드 호출
						prc.memberDelete();
						break;
				
				}
				
			} catch (Exception e)
			{
				System.out.println(e.toString());
			}
			
		} while (true);
		
		System.out.println();
		System.out.println("프로그램이 종료되었습니다.");
		

		
	}
}