-
JDBC (Java DataBase Connectivity) - 검색프로그래밍 언어/JDBC 2020. 11. 17. 16:49728x90반응형
본좌는 이제 사번으로 사원 정보를 조회해보도록 할 것이다.
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 ;
받아온 empNumber를 SQL문에 설정하여 사원 한명의 정보를 조회 하기 위해 번호를 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() 메소드 다시 설정
이제 반환받은 emp를 System.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반응형'프로그래밍 언어 > JDBC' 카테고리의 다른 글
JDBC (Java DataBase Connectivity) - 수정 (0) 2020.11.18 JDBC (Java DataBase Connectivity) - 추가 (0) 2020.11.18 JDBC (Java DataBase Connectivity) - 조회 Part 2 (0) 2020.11.13 JDBC (Java DataBase Connectivity) - 조회 Part 1 (0) 2020.11.13