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("프로그램이 종료되었습니다.");
}
}