본문 바로가기

programming/Gukbi

국비 교육 39일차 - DDL, 자바연동, VIEW

728x90
반응형

오늘도 역시 오라클에서 테이블 변경하는 것과 자바 연동을 배웠다.

심지어 jsp로 연결해서 브라우저에 띄우는 것도 연습했는데.. 뇌에 과부화 걸렸다

 

일단 오전에 한 것 부터 start

-- 2021-02-19 DDL
/*
    DDL : 데이터 정의 언어
    CREATE 
        => 생성
        1. 메모리 저장 공간 (데이터를 저장하는 공간) : 테이블
        2. 가상으로 저장 (SQL문장의 단순화, 보안) : View (Read Only) => 가상 테이블
            = 단순뷰 (한개의 테이블에서 데이터 가상으로 저장)
            = 복합뷰 (한개이상 테이블에서 가상으로 저장) : JOIN, SUBQUERT
            = 인라인뷰 (테이블대신 SELECT를 이용한다) : 페이지 나누기 (*****)
        3. PL/SQL => 사용자정의 함수를 만드는 경우에 사용하는 언어
            = FUNCTION : 리턴값을 가지고 있는 함수 => SUBSTR(), INSTR()...
            = PROCEDURE : 리턴값이 없는 함수(void) => 실무 (ERP: 관리프로그램)에서 많이 사용
                => 포인터를 이용하고 있다, 매개변수로 실행 결과값을 받아서 처리 => 댓글게시판
            = TRIGGER : 조건에 맞는 경우에 자동으로 실행 (오라클 자체에서 처리) => 자바에서는 코딩이 없다
                        소스 분석이 어렵다
        4. INDEX : 찾기(최적)
    DROP : 메모리에서 완전 삭제 (복구가 어렵다) => DBA, ADMIN => 포렌식
            데이터 삭제
            ==========
            = DELETE : 원하는 부분, 전체 삭제 (COMMIT이 없다)
            = TRUNCATE : 전체 삭제 (COMMIT이 존재) 
            ========== 테이블의 구조는 남아 있다
            = DROP
            ========== 테이블의 구조까지 삭제
    ALTER : COLUMN 단위로 수정 (제약조건까지 포함)
            1. 추가
                ADD
                = ADD 컬럼명 데이터형
                = ADD CONSTRAINT ~ 제약조건 추가 : PRIMARY KEY, FOREIGN KEY, CHECK, UNIQUE
            2. 수정
                MODIFY
                = MODIFY 컬럼명 데이터형 
                = MODIFY CONSTRAINT ~ : NOT NULL 
            3. 삭제
                DROP
                = DROP COLUMN
                = DROP CONSTRAINT
    RENAME : 테이블 이름 변경, 컬럼명 변경 => 자바에서 테이블명은 보통 파일
            = 테이블 이름 : RENAME old TO new
            = 컬럼명 : ALTER TABLE table명 RENAME old TO new
    TRUNCATE : 전체 데이터를 삭제 (잘라내기) = 테이블의 구조는 남아 있다
                = TRUNCATR TABLE table명
    
    테이블 제작 => 공유되는 데이터, 공유에 필요한 데이터만 추가
                                        ================ 재약조건 (수정, 삭제문제를 해결) 
                1. 중복이 없는 데이터는 반드시 한개 이상 필요하다 (데이터 무결성=기본키(priamry key)
                    * PRIMARY KEY는 한개만 생성 => 예외)
                2. 다른 참조시에 존재하는 데이터만 참조할 수 있게 제약 => 참조 무결성=외래키 (참조키)
                    * FOREIGN KEY (반드시 PRIAMRY KEY를 참조)
                3. 지정된 데이터만 참조 (CHECK)
                4. 중복이 없는 데이터 추가 (NULL 허용 : UNIQUE (후보키)
                5. 필수 입력 = NOT NULL 
                
                => 테이블 생성시 제약조건 설정
                => 테이블을 미리 만들고 나중에 ALTER를 이용해서 추가
                => 제약조건을 관리 (ENABLE/DISABLE)
                
                => 어떤 데이터를 저장할지 확인
                    => 사이트에 데이터 수집 : 모든 데이터를 가지고 올때 (문자열)
                    => 오라클에서 지원하는 데이터형을 숙지
                        문자저장 :  CHAR, VARCHAR2, CLOB
                        숫자저장 : NUMBER
                        날짜저장 : DATE
        
        => 테이블 만드는 형식
            ** 제약조건은 한개만 사용하는 것이 아니고 여러개를 사용할 수 있다
                primary key => 2개
                = UNIQUE + NOT NULL
                
            CREATE TABLE table_name(
                컬럼명 데이터형 [제약조건],
                컬럼명 데이터형 [제약조건],
                컬럼명 데이터형 [제약조건],
                컬럼명 데이터형 [제약조건],
                [제약조건]
            );
            
            =======================================
            => 1, 데이터 추가 (회원가입)
                INSERT
            => 2. 데이터 수정 (3개월마다 비밀번호 수정)
                UPDATE
            => 3. 데이터 삭제 (회원 탈퇴)
                DELETE
            ======================================== 트랜잭션 (COMMUT(저장), ROLLBACK(명령취소))
*/
CREATE TABLE sawon (
    sabun NUMBER(4),
    name VARCHAR2(30),
    sex VARCHAR2(10),
    dept VARCHAR2(30),
    job VARCHAR2(30),
    hiredate DATE,
    pay NUMBER CONSTRAINT sawon_pay_mm NOT NULL,
    CONSTRAINT sawon_sabun_pk PRIMARY KEY (sabun),
    CONSTRAINT sawon_sex_ck CHECK(sex IN('남자', '여자')),
    CONSTRAINT sawon_dept_ck CHECK(dept IN('기획부', '개발부','영업부', '자재부', '총무부')),
    CONSTRAINT sawon_job_ck CHECK(job IN('부장', '과장', '대리', '주임', '사원'))
);

INSERT INTO sawon VALUES(1, '이제노', '남자', '개발부', '대리', '18/02/19', 3600);
INSERT INTO sawon VALUES(2, '황인준', '남자', '기획부', '과장', '16/02/19', 5000);
INSERT INTO sawon VALUES(3, '박지성', '남자', '자재부', '사원', SYSDATE, 3000);
INSERT INTO sawon VALUES(4, '루카스', '남자', '총무부', '부장', '18/02/19', 7500);
INSERT INTO sawon VALUES(5, '이동혁', '남자', '개발부', '사원', SYSDATE, 3600);

INSERT INTO sawon VALUES(6, '이마크', '남자', '영업부', '주임', '18/02/19', 7500);
INSERT INTO sawon VALUES(7, '종천러', '남자', '기획부', '대리', SYSDATE, 3600);
COMMIT; 


-- 숫자 : 숫자 첨부, 문자(날짜) : '' 날짜 => 'YY/MM/DD'
SELECT * FROM sawon;

-- 이제노 대리 => 진급 (과장, 4000)
UPDATE sawon SET
job='과장', pay=4000
WHERE sabun=1;
COMMIT; 
SELECT * FROM sawon;


-- 황인준 퇴사 => DELETE 
DELETE FROM sawon
WHERE sabun=2;
COMMIT; 
SELECT * FROM sawon; 

INSERT INTO sawon VALUES((SELECT NVL(MAX(sabun)+1,1) FROM sawon), '이마크', '남자', '영업부', '사원', SYSDATE, 3000);
SELECT * FROM sawon; 
COMMIT; -- COMMIT이 없는 경우 (오라클에서는 실행, 자바에는 데이터를 가지고 올 수 없다)

-- 부서 변경 영업부 = 총무부 이동 (이마크)
UPDATE sawon SET
dept='총무부'
WHERE sabun=6;
COMMIT; 
SELECT * FROM sawon; 

DESC sawon;

 테이블을 새로 만들어주고, DML을 이용해서 값을 변경하거나 삭제해주는 연습을 했다. 

변경해준 뒤 꼭 COMMIT 해주기 잊지말기

 

이 뒤로는 오라클 연동을 계속 배웠는데, 일단 오라클에서 배운 VIEW먼저 복습하겠다. 

-- 2021-02-19 VIEW, SUBQUERY
/*
    1. View : 기존에 있는 테이블을 참조하는 가상테이블
        = 보안 (메모리에 저장된 상태가 아니고 SELECT를 가지고 처리)
        = 자바에서 코딩시 => SQL문장을 제작을 할때 SQL문장이 짧다
        
    2. View의 종류
        = 단순뷰 : 한개의 테이블을 이용
        = 복합뷰 : 한개 이상의 테이블을 이용 (JOIN, Subquery)
        = 인라인뷰 (*******) : SELECT를 테이블용으로 이용 => 페이지 나누기
        
    3. SELECT : 검색시 주로 사용
                = 데이터 검색
                = 컬럼대신 사용 : 스칼라 서브쿼리 
                = 테이블 대신 사용 : 인라인뷰, Top-N
    4. 단순뷰
        뷰생성
            CREATE VIEW view_name
            AS
                (SELECT * FROM emp);
            = INSERT, UPDATE ,DELETE, => View에서 처리하는게 아니라 참조한 테이블에서 처리
            = 뷰 옵션 : WITH CHECK OPTION, READ ONLY
*/
CREATE TABLE emp_test
AS
SELECT * FROM emp;
-- 확인
SELECT * FROM emp_test;
DESC emp;
DESC emp_test;

-- View : WITH CHECK OPTION (default) => INSERT, UPDATE, DELETE => 테이블에 영향
-- 단순뷰 (emp_test 테이블)
CREATE VIEW emp_view
AS
(SELECT * FROM emp_test);

SELECT * FROM emp_view;
SELECT empno, ename, hiredate, job FROM emp_view; 

INSERT INTO emp_view VALUES(8000, '홍길동', '대리', 7788, SYSDATE, 3000, 100, 10);
SELECT * FROM emp_view;
-- 문제점 
SELECT * FROM emp_test; -- 테이블에 저장됨 
DELETE FROM emp_view;
ROLLBACK;

-- 뷰 삭제
DROP VIEW emp_view;

-- 뷰 수정


CREATE OR REPLACE VIEW emp_view
AS
SELECT * FROM emp_test WITH READ ONLY; -- DML을 사용 할 수 없다
-- WITH CHECK OPTION => DML 사용이 가능 

-- 전체 데이터 출력
SELECT * FROM emp_view;
-- View (보여만 준다 => 읽기 전용)

-- 복합뷰 : 여러개의 테이블에서 필요한 데이터만 추출해서 가상으로 사용
-- JOIN 
CREATE OR REPLACE VIEW emp_dept_salgrade
AS 
    SELECT empno, ename, job, hiredate, sal, dname, loc, grade
    FROM emp, dept, salgrade
    WHERE emp.deptno=dept.deptno
    AND sal BETWEEN losal AND hisal;

SELECT * FROM emp_dept_salgrade; -- DML 사용할 수 없다

DROP VIEW emp_dept_salgrade;
-- 같은 컬럼명을 저장할때 별칭을 이용한다 
CREATE OR REPLACE VIEW myView 
AS
    SELECT e1.ename "my", e2.ename "you"
    FROM emp e1, emp e2
    WHERE e1.mgr=e2.empno(+);

SELECT * FROM myView;

-- 인라인뷰
SELECT empno, ename, job, hiredate, sal, deptno
FROM (SELECT empno, ename, job, hiredate, sal, deptno FROM emp);

SELECT empno, ename, job, dname, loc
FROM (SELECT * 
      FROM emp,dept
      WHERE emp.deptno=dept.deptno);

SELECT ename, empno, ename, job, sal, rownum
FROM emp;

-- 5개 (검색어 10개, 최신뉴스 10....)
SELECT empno, ename, job, sal, rownum
FROM emp
WHERE rownum<=5;

-- TOP-N
-- 인라인뷰 단점 : 중간에서 자를 수 없다 
SELECT empno, ename, job, sal, rownum
FROM (SELECT empno, ename, job,sal FROM emp ORDER BY sal DESC)
WHERE rownum<=5;

 VIEW는 기존에 있던 테이블에서 가져와서 가상 테이블을 만들어 주는 기능이다. 다만 단순뷰를 사용해서 값을 변경해줬을때는 위와 같이 기존에 있던 테이블의 값도 변경되기 때문에 주의해야 한다. 

 

package com.sist.dao;
/*
 * 1. 오라클 연결 
 *     Connection 
 *    오라클로 SQL을 전송  
 *     PreparedStatement : SQL전송 ,실행결과값을 받는다 
 *    오라클에서 받은 결과값을 저장 
 *     ResultSet
 *    # 오라클이 실행 => SQL => 자바에서 SQL문장을 만들어서 전송
 *    # 브라우저가 실행 => HTML => 자바에서 HTML만들어서 브러우저로 전송 
 *    
 *           사용자 요청        SQL문장을 전송
 *    브라우저   ======   자바  ======= 오라클
 *           HTML로 전송     실행 결과를 보내준다   ==> JSP
 *           ==== 기능(브라우저에 실행하는 언어)
 * 2. 오라클 연결전에 드라이버를 설치 Class.forName("오라클 드라이버")
 *    자바 <=> 오라클 (X) (oci=> 유료)
 *    자바 <=> 드라이버 <=> 오라클 (thin)
 * 3. 결과값을 받는 경우 
 *    ===== 단위가 Record (컬럼값 여러개가 들어 온다) => while문 한번 수행이
 *          전체 데이터를 받아서 저장 (VO) => VO여러개 모아서 저장(컬렉션)
 *    # 라이브러리 => 표준화(모든 개발자가 동일하게 코딩) => 누가 SQL문장을 잘 만드는지...
 */
import java.sql.*;
import java.util.*;
public class SawonDAO {
   // 오라클 연결에 필요한 클래스를 가지고 온다 
   // 1. 연결
   private Connection conn; // Socket이용 => TCP
   // 2. 전송 (SQL문장을 전송) 
   private PreparedStatement ps; // OutputStrem (전송), BufferedReader(수신)
   // 3. 오라클 주소 => jdbc:업체명:IP:PORT:데이터베이스(테이블 저장되어 있는 데이터베이스(폴더)) => XE
   private final String URL="jdbc:oracle:thin:@localhost:1521:XE";
   
   // 1. 드라이버 등록 => 한번만 수행이 가능 (한번만 호출이 가능 메소드 => 생성자)
   public SawonDAO()
   {
	   // JDBC (Network) => CheckException => 반드시 예외처리를 해야된다
	   try
	   {
		   Class.forName("oracle.jdbc.driver.OracleDriver"); // 오라클에서 연결이 가능하게 만든 클래스
		   // 대소문자 구분 ==> 방식 = 패키지.클래스명 => 클래스의 정보를 읽어서 메모리 할당 
		   // 등록 : 패키지.클래스 => 메모리 할당을 요청 
		   // 1. new , 2. Class.forName() => 스프링(사용자 정의 클래스 관리자)
		   // new를 사용하면 => 결합성이 높은 프로그램 
	   }catch(Exception ex)
	   {
		   System.out.println(ex.getMessage());
	   }
   }
   // 2. 연결,해제를 반복 => 한사람당 1개의 Connection만 사용이 가능하게 만든다  (XE:연습용=>50개이상)
   public void getConnection()
   {
	   try
	   {
		   conn=DriverManager.getConnection(URL,"hr","happy");
		   // conn hr/happy
	   }catch(Exception ex) {}
   }
   // 3. 해제
   public void disConnection()
   {
	   try
	   {
		   if(ps!=null) ps.close();
		   if(conn!=null) conn.close();
	   }catch(Exception ex) {}
   }
   // 싱글턴 => Web을 사용하기전에 디자인패턴 
   // 4. 각 테이블마다 기능 (SELECT , INSERT , UPDATE ,DELETE) => CURD
   // 기능 1 => 전체 목록을 출력  VO를 여러개 저장 ArrayList
   public ArrayList<SawonVO> selectList()
   {
	   ArrayList<SawonVO> list=new ArrayList<SawonVO>();
	   try
	   {
		   // 목록 => 페이지 나누기 (인라인뷰)
		   getConnection();//오라클 연결 
		   // SQL문장을 만들어서 오라클 전송할 준비 
		   String sql="SELECT sabun,name,sex,dept,job,hiredate "
				     +"FROM sawon "
				     +"ORDER BY 1"; // sql문장은 무조건 문자열로 만든다
		   ps=conn.prepareStatement(sql);
		   // 오라클에 요청 => SQL문장을 실행한 후에 결과값을 달라 
		   ResultSet rs=ps.executeQuery();
		   // 처음부터 끝까지 => 데이터를 읽어오기 시작 => next()
		   while(rs.next())
		   {
			   SawonVO vo=new SawonVO();
			   vo.setSabun(rs.getInt(1));
			   vo.setName(rs.getString(2));
			   vo.setSex(rs.getString(3));
			   vo.setDept(rs.getString(4));
			   vo.setJob(rs.getString(5));
			   vo.setHiredate(rs.getDate(6)); 
			   
			   list.add(vo);
		   }
		   rs.close();
	   }catch(Exception ex)
	   {
		   System.out.println(ex.getMessage());
	   }
	   finally
	   {
		   disConnection();//오라클 연결 해제
	   }
	   return list;
   }
   // 기능 2 => 사원정보 상세보기 VO한개에 값을 채운다 
   public SawonVO selectOne(int sabun) // 반드시 중복이 없는 데이터(Primary Key)
   {
	   SawonVO vo=new SawonVO();
	   try
	   {
		   // 연결
		   getConnection();
		   // SQL문장 제작
		   String sql="SELECT * "
				     +"FROM sawon "
				     +"WHERE sabun=?";
		   ps=conn.prepareStatement(sql);
		   // ?에 값을 채운다 
		   ps.setInt(1, sabun); // 문자열 => setString() , 날짜 => setDate()
		   //      번호 => ?의 순서  => 오라클(번호가 1번부터 시작한다)
		   //  ?,?,? => 1,2,3
		   // 실행요청
		   ResultSet rs=ps.executeQuery();
		   rs.next();
		   // 결과값 받기
		   vo.setSabun(rs.getInt(1));
		   vo.setName(rs.getString(2));
		   vo.setSex(rs.getString(3));
		   vo.setDept(rs.getString(4));
		   vo.setJob(rs.getString(5));
		   vo.setHiredate(rs.getDate(6));
		   vo.setPay(rs.getInt(7));
		   
		   rs.close();
	   }catch(Exception ex)
	   {
		   // 오류처리 
		   System.out.println(ex.getMessage());
	   }
	   finally
	   {
		   // 오라클 해제 
		   disConnection();
	   }
	   return vo;
   }
   // 기능 3 => 신입사원 추가 => 매개변수 INSERT => void(오라클 자체에서 처리)
   public void insert(SawonVO vo) // 전체 데이터 가지고 있는 클래스를 매개변수로 사용 (매개변수는 3개 이상이면 => 클래스 사용)
   {
	   try
	   {
		   // 정상 수행시 처리
		   // 1.연결 
		   getConnection();
		   //2. sql문장 만들기
		   String sql="INSERT INTO sawon VALUES("
				   +"(SELECT NVL(MAX(sabun)+1,1) FROM sawon)," // 자동 증가 (Primary key 처리가능)
				   +"?,?,?,?,SYSDATE,?)";
		   // 전송 (오라클)
		   ps=conn.prepareStatement(sql);
		   // 실행전에 ?에 값을 채운다
		   ps.setString(1, vo.getName());
		   ps.setString(2, vo.getSex());
		   ps.setString(3, vo.getDept());
		   ps.setString(4, vo.getJob());
		   ps.setInt(5, vo.getPay());
		   
		   // 실행 명령
		   ps.executeUpdate();
		   
	   }catch(Exception ex) 
	   {
		   // 오류 확인 
		   System.out.println(ex.getMessage());
	   }
	   finally
	   {
		   // try, catch와 관련없이 무조건 수행하는 문장(데이터베이스, 네트워크)
		   // 오라클 닫기
		   disConnection();
	   }
   }
   // 기타
   public ArrayList<String> sawonGetDept()
   {
	   ArrayList<String> list=new ArrayList<String>();
	   		try 
	   		{
	   			getConnection();
	   			String sql="SELECT DISTINCT dept FROM sawon";
	   			ps=conn.prepareStatement(sql);
	   			ResultSet rs=ps.executeQuery();
	   			while(rs.next())
	   			{
	   				String dept=rs.getString(1);
	   						list.add(dept);
	   			}
	   			rs.close();
			}catch (Exception ex)
	   		{
				System.out.println(ex.getMessage());
			}
			finally
			{
			   
			}
	   return list;
   }
   
   public ArrayList<String> sawonGetJob()
   {
	   ArrayList<String> list=new ArrayList<String>();
	   		try 
	   		{
	   			getConnection();
	   			String sql="SELECT DISTINCT job FROM sawon";
	   			ps=conn.prepareStatement(sql);
	   			ResultSet rs=ps.executeQuery();
	   			while(rs.next())
	   			{
	   				String job=rs.getString(1);
	   						list.add(job);
	   			}
	   			rs.close();
			}catch (Exception ex)
	   		{
				System.out.println(ex.getMessage());
			}
			finally
			{
			   
			}
	   return list;
   }
   // 기능 4 => 진급,급여변동 => 매개변수 UPDATE => void (오라클 자체 처리)
   public void update(int sabun,String dept, String job, int pay)
   {
	    try
	    {
			getConnection();
			// SQL문장 제작
			String sql="UPDATE sawon SET "
					+"dept=?, job=?, pay=? "
					+"WHERE sabun=?";
			ps=conn.prepareStatement(sql);
			// ?에 값을 채운다
			ps.setString(1, dept);
			ps.setString(2, job);
			ps.setInt(3, pay);
			ps.setInt(4, sabun);
			
			// 수정명령
			ps.executeUpdate();
			
		} catch (Exception ex) 
	    {
			System.out.println(ex.getMessage());
		}
	    finally
	    {
	    	disConnection();
	    }
   }
   // 기능 5 => 퇴사        => 매개변수 DELETE => void (오라클 자체 처리) 
   public void delete(int sabun)
   {
	   try
	   {
		   // 연결
		   getConnection();
		   // SQL 문장 제작
		   String sql="DELETE FROM sawon "
				   +"WHERE sabun=?"; // commit을 수행 
		   
		   // 오라클 전송
		   ps=conn.prepareStatement(sql);
		   // 실행전에 ?가 있으면 반드시 값을 채워준다
		   ps.setInt(1, sabun);
		   // 실행
		   ps.executeUpdate();
		   /*
		    * executeUpdate() => COMMIT ==> INSERT, UPDATE, DELETE(오라클 데이터 변경시에 사용)
		    * executeQuery() => COMMIT이 없다 => SELECT 
		    */
	   }catch(Exception ex)
	   {
		   System.out.println(ex.getMessage());
	   }
	   finally
	   {
		   // 해제
		   disConnection();
	   }
   }
   // 기능 6 => 찾기        => ArrsyList SELECT => 리턴형 (목록: ArrayList, 한개 출력 : VO)
   public ArrayList<SawonVO> sawonFindData(String name)
   {
	   ArrayList<SawonVO> list = new ArrayList<SawonVO>();
	   try 
	   {
		   // 연결
		   getConnection();
		   // SQL 문장 제작
		   String sql="SELECT * "
				   +"FROM sawon "
				   +"WHERE name LIKE '%'||?||'%'";
		   ps=conn.prepareStatement(sql);
		   // ?에 값을 채운다
		   ps.setString(1, name);
		   
		   // 실행후에 결과값을 가지고 온다
		   ResultSet rs=ps.executeQuery();
		   while(rs.next())
		   {
			   SawonVO vo=new SawonVO();
			   vo.setSabun(rs.getInt(1));
			   vo.setName(rs.getString(2));
			   vo.setSex(rs.getString(3));
			   vo.setDept(rs.getString(4));
			   vo.setJob(rs.getString(5));
			   vo.setHiredate(rs.getDate(6));
			   vo.setPay(rs.getInt(7));
			   
			   list.add(vo);
		   }
		   rs.close();
				   
	   } 
	   catch (Exception ex) 
	   {
		   System.out.println(ex.getMessage());
	   }
	   finally
	   {
		   disConnection(); // 해제
	   }
	   return list;
   }
}

위에가 DAO 코드이다. 연결/해제 하는 부분은 전부 동일하고 실행후에 결과 값을 어떻게 채워올지가 달라진다. 

 

아래는 실행해주는 MAIN 코드

 

package com.sist.main;
import java.util.*;
import com.sist.dao.*; // 다른패키지에 클래스가 존재하면 반드시 import를 이용해서 가지고 온다
public class UserMain {

	public static void main(String[] args) {
		
		System.out.println("===========사원 전체 목록============");
		// 오라클로부터 데이터 읽기
		SawonDAO dao=new SawonDAO();
		ArrayList<SawonVO> list = dao.selectList();
		// 읽어온 데이터를 출력한다
		for(SawonVO vo:list)
		{
			System.out.println(vo.getSabun()+" "
							+vo.getName()+" "
							+vo.getSex()+" "
							+vo.getDept()+" "
							+vo.getJob()+" "
							+vo.getHiredate());
			
		}
		System.out.println("=================================");
		Scanner scan=new Scanner(System.in);
		System.out.print("검색어를 입력하세요?:");
		String name=scan.next();
		ArrayList<SawonVO> fList=dao.sawonFindData(name);
		for(SawonVO vo:fList)
		{
			System.out.println(vo.getSabun()+" "
					+vo.getName()+" "
					+vo.getSex()+" "
					+vo.getDept()+" "
					+vo.getJob()+" "
					+vo.getHiredate());
			
		}
		
//		System.out.println("상세 볼 사번을 입력:");
//		int sabun=scan.nextInt();
//		SawonVO vo=dao.selectOne(sabun);
//		System.out.println("사번:"+vo.getSabun());
//		System.out.println("이름:"+vo.getName());
//		System.out.println("성별:"+vo.getSex());
//		System.out.println("부서:"+vo.getDept());
//		System.out.println("직위:"+vo.getJob());
//		System.out.println("입사일:"+vo.getHiredate());
//		System.out.println("연봉:"+vo.getPay());
//		System.out.print("퇴사할 사윈의 사번 입력:");
//		int sabun=scan.nextInt();
//		dao.delete(sabun);
		
//		// 데이터 추가
//		// 1. 이름 입력
//		System.out.print("이름 입력:");
//		String name=scan.next();
//		// 2. 성별 입력 
//		System.out.print("성별을 선택하세요(남자, 여자):");
//		String sex = scan.next();
//		// 3. 부서 선택
//		ArrayList<String> dList=dao.sawonGetDept();
//		String temp="";
//		System.out.println();
//		for(String s:dList)
//		{
//			temp+=s+",";
//		}
//		temp=temp.substring(0, temp.lastIndexOf(","));
//		System.out.println("부서를 선택하세요("+temp+"):");
//		String dept=scan.next();
//		
//		// 4.직위 선택
//		ArrayList<String> jList=dao.sawonGetJob();
//		temp="";
//		for(String s:jList)
//		{
//			temp+=s+",";
//		}
//		temp=temp.substring(0, temp.lastIndexOf(","));
//		System.out.println("직위를 선택하세요("+temp+"):");
//		String job=scan.next();
//		
//		// 5. 급여 입력
//		System.out.print("급여 입력:");
//		int pay=scan.nextInt();
//		
//		// VO로 모아서 => DAO로 전송 => 오라클 연결(INSERT)
//		SawonVO vo=new SawonVO();
//		vo.setName(name);
//		vo.setSex(sex);
//		vo.setDept(dept);
//		vo.setJob(job);
//		vo.setPay(pay);
//		
//		dao.insert(vo);
//		System.out.println("사원 추가 완료");
		
		
//		// 수정
//		// 1. 수정할 사번 선택
//		System.out.print("수정할 사원의 사번 입력:");
//		int sabun=scan.nextInt();
//		// 2. 부서 선택
//		ArrayList<String> dList=dao.sawonGetDept();
//		String temp="";
//		System.out.println();
//		for(String s:dList)
//		{
//			temp+=s+",";
//		}
//		temp=temp.substring(0, temp.lastIndexOf(","));
//		System.out.println("부서를 선택하세요("+temp+"):");
//		String dept=scan.next();
//		
//		// 3.직위 선택
//		ArrayList<String> jList=dao.sawonGetJob();
//		temp="";
//		for(String s:jList)
//		{
//			temp+=s+",";
//		}
//		temp=temp.substring(0, temp.lastIndexOf(","));
//		System.out.println("직위를 선택하세요("+temp+"):");
//		String job=scan.next();
//		
//		// 4. 급여 입력
//		System.out.print("급여 입력:");
//		int pay=scan.nextInt();
//		
//		// 유저로부터 받은 값을 DAO로 전송 => 오라클로 SQL제작후에 전송
//		dao.update(sabun, dept, job, pay);
//		System.out.println("사원 수정 완료~!");
		
	} 

}
728x90
반응형