ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JDBC (Java DataBase Connectivity) - 검색
    프로그래밍 언어/JDBC 2020. 11. 17. 16:49
    728x90
    반응형

    본좌는 이제 사번으로 사원 정보를 조회해보도록 할 것이다.

     

     

    2 - 1) selectOne() 메소드 생성

    switch(sel) {
      case 1: 
        selectAll(); // 1_1. 같은 클래스에 있는 selectAll()을 호출
        break;
      case 2: 
        selectOne(); // 2_1. 같은 클래스에 있는 selectOne()을 호출
        break;
      case 3: 
        insertEmp();
        break;
      case 4: 
        updateEmp();
        break;
      case 5: 
        deleteEmp();
        break;
      case 6: 
        selectOne2();
        break;
      case 0: 
        System.out.println("프로그램 종료.");
        break;
      default : System.out.println("잘못 입력하셨습니다.");
    }

    일단 메인메뉴에서 사원 정보를 조회하는 selectOne()을 생성해서 호출한다.

     

     

    2 - 2) selectOne() 메소드 설정

    // 2_2. 사번을 입력받아 사원 한 명의 정보를 조회하는 View
    	private void selectOne() {
    		System.out.println("[사번으로 사원 검색]");
    		System.out.print("사번 입력: ");
    		int empNo = sc.nextInt();
    		sc.nextLine();
    		
    		// 2_3. 입력받은 사번을 매개변수로 하는
    		// EmpService.SelectOne(empNo)를 호출하여 
    		// 사원 한명의 정보를 반환 받음
    		Emp emp = empService.selectOne(empNo);
    		
    		// 2_11. 조회 결과가 있을 경우에 정보 조회
    		// 없을 경우에는 "조회 결과가 없습니다." 출력
    		
    		if (emp == null) {
    			System.out.println("조회하는 사원이 없습니다.");
    		} else {
    			System.out.println("사번: " + emp.getEmpNo());
    			System.out.println("이름: " + emp.geteName());
    			System.out.println("직책: " + emp.getJob());
    			System.out.println("직속상사: " + emp.getMgr());
    			System.out.println("입사일: " + emp.getHireDate());
    			System.out.println("급여: " + emp.getSal());
    			System.out.println("커미션: " + emp.getComm());
    			System.out.println("부서번호: " + emp.getDeptNo());			
    		}
    	}

    사번을 입력받는 empNo변수를 empService.selectOne()에 매개변수로 넘겨줘서 반환값을 emp로 받는다.

    받은 emp를 가지고 if문을 설정해서 Null값일 때 사원이 없게 나타나도록 하고 emp의 반환값을 받았을 때는

    각 컬럼의 값을 받아와 System.out.println();으로 호출한다.

    그럼 전달받은 empService.selectOne()를 설정하자.

     

     

    2 - 3) empService.selectOne() 메소드 설정

    public Emp selectOne(int empNumber) {
    		
    		// 2_4. 전달받은 empNO의 별도 가공 처리가 필요 없으므로
    		// EMP.selectOne(empNo)를 호출하여
    		// 조회된 사원 한 명의 정보를 반환 받음.
    		
    		Emp empList = empDAO.selectOne(empNumber);
    		// 2-10. 전달받은 emp를 반환
    		return empList;
    	}

    전달받은 empNumber값을 다시 empDAO.selectOne();으로 처리과정을 넘겨준다.

    그럼 다시 empDAO.selectOne();로 가서 처리해보자

     

     

     

     

    2 - 4) empDAO.selectOne() 메소드 설정

    // 2. 사번으로 사원 정보 조회 DAO
    	public Emp selectOne(int empNumber) {
    
    		Connection conn = null; 
    		Statement stmt = null;
    		ResultSet rset = null;
    		
    		Emp emp = null;
    		// DB에서 조회한 결과를 저장할 Emp 참조변수
    		
    
    		try {
    			// 2_5. JDBC 드라이버 로드 및 커넥션 얻어오기
    			Class.forName("oracle.jdbc.driver.OracleDriver");
    			conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe", "scott", "tiger");
    			
    			// 2_6. 사원 한 명의 정보를 조회하기 위한 SQL구문을 준비하고 
    			// Statement 객체를 생성하여 
    			// DB로 전달 및 수행 후 결과를 반환 받아오기
    			String query = "SELECT * FROM EMP WHERE EMPNO = "+empNumber ;
    			
    			stmt = conn.createStatement();
    			rset = stmt.executeQuery(query);
    			
    			// 2_7. 조회 결과가 있을 경우
    			// Emp 참조변수에 조회 결과를 저장
    			
    			
    			// 조회 결과가 0또는 1행이 반환되므로
    			// rset.next() 한 번 호출했을때
    			// true가 나오면 조회 결과가 있는 것
    			// false가 나오면 조회 결과가 없는 것
    			if(rset.next()) {
    				
    				// 조회 결과에서 각 컬럼의 값을 얻어와 변수에 저장
    				int empNo = rset.getInt("EMPNO"); 
    				String eName = rset.getString("ENAME"); 
    				String job = rset.getString("JOB");
    				int mgr = rset.getInt("MGR");
    				Date hireDate = rset.getDate("HIREDATE");
    				int sal = rset.getInt("SAL");
    				int comm = rset.getInt("COMM");
    				int deptNo = rset.getInt("DEPTNO");
    				
    				// 조회 결과를 이용하여 Emp객체를 생성
    				emp = new Emp(empNo, eName, job, mgr, hireDate, sal, comm, deptNo);
    			}
    
    			// 조회 성공 시 emp는 참조하는 객체가 있음
    			// 조회 실패 시 emp는 참조하는 객체가 없음 (null)			
    
    							
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}finally {
    			try {
    				// 2_8. 사용한 JDBC 객체 반환
    				if (rset!=null) {	
    					rset.close();
    				}
    				if (stmt!=null) {	
    					stmt.close();
    				}
    				if (conn!=null) {	
    					conn.close();
    				}
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    		
    		// 2_9. 조회 결과가 저장된 emp반환		
    		return emp; // 메소드 반환형을 Emp로 수정
    	}
    
    	public Emp selectOne2(int empNo, String empName) {
    		
    		Connection conn = null; 
    		Statement stmt = null;
    		ResultSet rset = null;
    		
    		Emp emp = null;
    		
    		try {
    
    			Class.forName("oracle.jdbc.driver.OracleDriver");
    			conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe", "scott", "tiger");
    
    			String query = "SELECT * FROM EMP WHERE EMPNO = "+empNo+" AND UPPER(ENAME) = '" + empName.toUpperCase()+"'" ;
    			
    			stmt = conn.createStatement();
    			rset = stmt.executeQuery(query);
    
    			if(rset.next()) {
    				
    				int empNumber = rset.getInt("EMPNO"); 
    				String eName = rset.getString("ENAME"); 
    				String job = rset.getString("JOB");
    				int mgr = rset.getInt("MGR");
    				Date hireDate = rset.getDate("HIREDATE");
    				int sal = rset.getInt("SAL");
    				int comm = rset.getInt("COMM");
    				int deptNo = rset.getInt("DEPTNO");
    				
    				emp = new Emp(empNumber, eName, job, mgr, hireDate, sal, comm, deptNo);
    			}
    	
    
    							
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}finally {
    			try {
    				if (rset!=null) {	
    					rset.close();
    				}
    				if (stmt!=null) {	
    					stmt.close();
    				}
    				if (conn!=null) {	
    					conn.close();
    				}
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    			
    		return emp; 
    		
    	}

    일단 JDBC 드라이버 로드와 커넥션을 얻어와야한다. 

     

    Class.forName("oracle.jdbc.driver.OracleDriver");
    conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe", "scott", "tiger");

    전체 조회할때처럼 Class.forName("")을 통해 드라이버 로드를 가져온 후

    Connection 객체에 주소와 계정아이디, 비밀번호를 담는다.

     

    그다음 SQL문을 설정한다.

    String query = "SELECT * FROM EMP WHERE EMPNO = "+empNumber ;

    받아온 empNumberSQL문에 설정하여 사원 한명의 정보를 조회 하기 위해 번호를 WHERE절에 설정하여 호출한다.

     

    stmt = conn.createStatement();
    rset = stmt.executeQuery(query);

    Statement 객체를 생성하여  DB로 전달 및 수행 후 결과를 반환 받아온다.

    이때 rset에 받아온  조회 결과는 0또는 1행이 반환되지만 0이 나올 경우를 생각하여 if문을 설정한다.

     

    if(rset.next()) {
    				
          // 조회 결과에서 각 컬럼의 값을 얻어와 변수에 저장
          int empNo = rset.getInt("EMPNO"); 
          String eName = rset.getString("ENAME"); 
          String job = rset.getString("JOB");
          int mgr = rset.getInt("MGR");
          Date hireDate = rset.getDate("HIREDATE");
          int sal = rset.getInt("SAL");
          int comm = rset.getInt("COMM");
          int deptNo = rset.getInt("DEPTNO");
    
     		 // 조회 결과를 이용하여 Emp객체를 생성
    	emp = new Emp(empNo, eName, job, mgr, hireDate, sal, comm, deptNo);
    }

    rset.next()를 if문 안에 넣어두어 rset의 값이 1일 경우 각 컬럼의 값을 얻어와 변수에 저장한 후

    Emp객체를 생성하여 반환한다.

     

    하지만 반환하기전에 사용한 JDBC 객체들을 finally를 통해 닫아줘야한다.

    finally {
    	try {
    	// 2_8. 사용한 JDBC 객체 반환
    		if (rset!=null) {	
    			rset.close();
        }
            if (stmt!=null) {	
                stmt.close();
        }
            if (conn!=null) {	
                conn.close();
            }
        } catch (SQLException e) {
        e.printStackTrace();
    }

     

    닫아 준 뒤 return을 통해 반환한다.

    return emp;

     

     

    2 - 1) selectOne() 메소드 다시 설정

    이제 반환받은 empSystem.out.println();을 통해 출력을 한다.

    if (emp == null) {
        	System.out.println("조회하는 사원이 없습니다.");
        } else {
            System.out.println("사번: " + emp.getEmpNo());
            System.out.println("이름: " + emp.geteName());
            System.out.println("직책: " + emp.getJob());
            System.out.println("직속상사: " + emp.getMgr());
            System.out.println("입사일: " + emp.getHireDate());
            System.out.println("급여: " + emp.getSal());
            System.out.println("커미션: " + emp.getComm());
            System.out.println("부서번호: " + emp.getDeptNo());			
        }

    만약 반환받은값이 Null 이면 사원이 없다고 설정한다.

     

    이로서 완성이다.

    728x90
    반응형
Designed by Tistory.