▶ 총 5개 Class 생성
- View Class : 입·출력 담당 클래스
/ 사용자 담당 인터페이스 요소를 사용해 사용자의 요청과 응답을 보여주는 화면 - Service Class : 요청에 맞는 기능을 수행한 결과를 제공
/ 전달 받은 데이터 또는 DAO 수행 결과 데이터를 필요한 형태로 가공처리 - DAO Class : Data Access Object / DB와 연결되어 작성한 SQL을 전달하여 이에 대한 결과를 반환 받는 역할을 수행
- DTO Class : Data Transfer Object / 데이터 전달용 객체
※ DTO의 필드는 DB 컬럼과 비슷하게 작성되는 경우가 많음(개발자 재량으로 상황에 따라 필드 추가 또는 삭제 가능) - Run Class : 프로그램 실행용 클래스
▶ EmployeeView 클래스
public class EmployeeView {
/*
* 필드
* Service Class 호출을 위해 객체 생성
* 데이터를 입력 받기 위해 Scanner 기능 사용
**/
private EmployeeService service = new EmployeeService();
private Scanner sc = new Scanner(System.in);
// 메소드
/**
* 전체 메뉴 조회 View
*/
public void displayMenu() {
int menuNum = -1;
// 0으로 초기값 설정할 경우, 잘못된 값 입력 받으면 do 실행 후 while 문 조건으로 인해 프로그램 종료
do {
try { // 프로그램 메뉴
System.out.println();
System.out.println("==================================");
System.out.println("[사원 관리 프로그램]");
System.out.println("1. 전체 사원 정보 조회");
System.out.println("2. 사번으로 사원 정보 조회");
System.out.println("3. 입력 받은 급여 이상으로 받는 모든 직원 조회");
System.out.println("4. 새로운 사원 정보 추가");
System.out.println("5. 사번으로 사원 정보 삭제");
System.out.println("6. 사번으로 사원 정보 수정");
System.out.println("7. 부서의 보너스율 수정");
System.out.println("0. 프로그램 종료");
System.out.println("==================================");
System.out.print("메뉴 선택 : ");
menuNum = sc.nextInt();
System.out.println();
switch(menuNum) {
case 1 : selectAll(); break;
case 2 : selectOne(); break;
case 3 : selectSalary(); break;
case 4 : insertEmployee(); break;
case 5 : deleteEmployee(); break;
case 6 : updateEmployee(); break;
case 7 : updateBonus(); break;
case 0 : System.out.println("프로그램을 종료합니다."); break;
default : System.out.println("잘못 입력하셨습니다. 다시 입력해주세요.");
}
} catch (InputMismatchException e) {
System.out.println("입력 형식이 잘못되었습니다.");
}
} while(menuNum != 0);
}
/**
* 1. 전체 사원 정보 조회 View
*/
private void selectAll() {
System.out.println("[전체 사원 정보 조회]");
// 전체 사원 정보를 반환하는 Service 메소드(selectAll()) 호출
// 반환된 결과 값을 Employee 클래스로 제한된 List 참조변수에 대입
List<Employee> empList = service.selectAll();
// 출력용 메소드(printList()) 사용해 반환된 결과 출력
printList(empList);
}
/**
* 출력용 보조 메소드
* @param empList (Employee 타입으로 제한된 List의 참조변수)
*/
private void printList(List<Employee> empList) {
if(empList.isEmpty()) { // 조회 결과 없을 경우
System.out.println("조회 결과가 없습니다.");
} else { // 조회 결과 있을 경우
for(Employee emp :empList) {
System.out.println(emp);
}
}
}
/**
* 2. 사번으로 사원 정보 조회 View
*/
private void selectOne() {
System.out.println("[사번으로 사원 정보 조회]");
int input = 0;
try {
System.out.print("사번 입력: ");
input = sc.nextInt();
} catch (Exception e) {
System.out.println("사번(숫자)을 제대로 입력해주세요.");
sc.nextLine();
}
// 입력 사번에 해당하는 사원 정보를 반환하는 Service 메소드(selectOne()) 호출
// 반환된 결과 값을 Employee 클래스의 참조변수에 대입
Employee empOne = service.selectOne(input);
// 조건에 해당하는 결과값에 따라 성공/실패 문구 출력
if(empOne.getEmpId() != 0) System.out.println(empOne);
else System.out.println("해당 사번의 사원은 존재하지 않습니다.");
}
/**
* 3. 입력한 급여 이상을 수령하는 모든 직원 조회 View
*/
private void selectSalary() {
System.out.println("[특정 급여 이상 수령하는 직원 조회]");
int input = 0;
try {
System.out.print("급여 입력: ");
input = sc.nextInt();
} catch (InputMismatchException e) {
System.out.println("급여(숫자)를 제대로 입력해주세요.");
}
// 입력 급여 이상을 수령하는 사원 정보를 반환하는 Service 메소드(selectSalary()) 호출
// 반환된 결과 값을 Employee 클래스로 제한된 List 참조변수에 대입
List<Employee> empSalary = service.selectSalary(input);
// 출력용 메소드(printList()) 사용해 반환된 결과 출력
printList(empSalary);
// 결과 값에 해당하는 인원 수 출력
System.out.println("총 "+empSalary.size()+"명");
}
/**
* 4. 신규 사원 정보 추가 View
*/
private void insertEmployee() {
System.out.println("[신규 사원 정보 추가]");
System.out.print("사번 : ");
int empId = sc.nextInt();
System.out.print("이름 : ");
String empName = sc.next();
System.out.print("주민등록번호 : ");
String empNo = sc.next();
System.out.print("이메일 : ");
String email = sc.next();
System.out.print("전화번호 : ");
String phone = sc.next();
System.out.print("부서 코드(D1 ~ D9) : ");
String deptCode = sc.next();
System.out.print("직급 코드(J1 ~ J7) : ");
String jobCode = sc.next();
System.out.print("급여 : ");
int salary = sc.nextInt();
System.out.print("보너스율 : ");
double bonus = sc.nextDouble();
// 입력 받은 값을 저장할 객체 생성
Employee newEmpOne = new Employee(empId, empName, empNo, email, phone, deptCode, jobCode, salary, bonus);
// 신규 사원 정보를 삽입하는 Service 메소드(insertEmployee()) 호출하여 결과값 반환 받기
// DML은 SQL문 수행 성공한 행의 개수를 반환
int result = service.insertEmployee(newEmpOne);
// 조건에 해당하는 결과값에 따라 성공/실패 문구 출력
if(result != 0) System.out.println("신규 사원 정보가 입력되었습니다.");
else System.out.println("신규 사원 정보 추가에 실패했습니다.");
}
/**
* 5. 입력한 사번에 해당하는 사원 정보 삭제 View
*/
private void deleteEmployee() {
System.out.println("[사원 정보 삭제]");
// 사번 입력용 메소드(inputId()) 사용해 삭제할 사원의 사번 입력 받기
int input = inputId();
// 입력한 사번에 해당하는 사원 정보를 삭제하는 Service 메소드(deleteEmployee()) 호출하여 결과값 반환 받기
// DML은 SQL문 수행 성공한 행의 개수를 반환
int result = service.deleteEmployee(input);
// 조건에 해당하는 결과값에 따라 성공/실패 문구 출력
if(result !=0 ) System.out.println("사원 정보가 삭제되었습니다.");
else System.out.println("사원 정보 삭제에 실패했습니다.");
}
/**
* 사번 입력용 보조 메소드
* @return empId
*/
private int inputId() {
System.out.print("사번 입력 : ");
int empId = sc.nextInt();
return empId;
}
/**
* 6. 입력 받은 사번으로 사원 정보 수정 View
*/
private void updateEmployee() {
System.out.println("[사번으로 사원 정보 수정]");
// 정보 수정할 사원의 사번 입력 받기
int input = inputId();
// 수정할 정보(이메일, 전화번호, 급여) 입력
System.out.println("[수정할 정보 입력(총 3개 항목)]");
System.out.print("1. 이메일: ");
String email = sc.next();
System.out.print("2. 전화번호(-제외): ");
String phone = sc.next();
System.out.print("3. 급여: ");
int salary = sc.nextInt();
// 입력 받은 값을 담을 객체 생성
Employee emp = new Employee();
// setter 사용해서 입력 받은 값 객체에 담기
emp.setEmail(email);
emp.setPhone(phone);
emp.setSalary(salary);
// 입력 받은 사번에 해당하는 사원 정보를 수정하는 Service 메소드(updateEmployee()) 호출하여 결과값 반환 받기
// DML은 SQL문 수행 성공한 행의 개수를 반환
int result = service.updateEmployee(input, emp);
// 조건에 해당하는 결과값에 따라 성공/실패 문구 출력
if(result != 0) System.out.println("사원 정보가 수정되었습니다.");
else System.out.println("사원 정보 수정에 실패했습니다.");
}
/**
* 7. 입력 받은 정보(부서코드/보너스율)로 부서 보너스율 수정 View
*/
private void updateBonus() {
System.out.println("[부서의 보너스율 수정(총 2개 항목)]");
System.out.print("1. 부서 코드(D1 ~ D9): ");
String deptCode = sc.next();
System.out.print("2. 수정할 보너스율: ");
double bonus = sc.nextDouble();
// 입력 받은 값을 담을 객체 생성
Employee emp = new Employee();
// setter 사용해서 입력 값을 객체에 담기
emp.setDeptCode(deptCode);
emp.setBonus(bonus);
// 입력 받은 부서코드에 해당하는 부서 보너스율을 수정하는 Service 메소드(updateBonus()) 호출하여 결과값 반환 받기
// DML은 SQL문 수행 성공한 행의 개수를 반환
int result = service.updateBonus(emp);
// 조건에 해당하는 결과 값에 따라 성공/실패 문구 출력
if(result != 0) System.out.println("해당 부서의 보너스율을 수정했습니다.");
else System.out.println("보너스율 수정에 실패했습니다.");
}
}
▶ EmployeeService 클래스
public class EmployeeService {
// 필드
private EmployeeDAO dao = new EmployeeDAO();
/**
* 1. 전체 사원 정보 조회 Service
* @return empList
*/
public List<Employee> selectAll() {
// DAO 메소드 호출
List<Employee> empList = dao.selectAll();
// DAO 메소드 수행 결과 반환
return empList;
}
/**
* 2. 사번으로 사원 정보 조회 Service
* @param input
* @return empOne
*/
public Employee selectOne(int input) {
// DAO 메소드 호출
Employee empOne = dao.selectOne(input);
// DAO 메소드 수행 결과 반환
return empOne;
}
/**
* 3. 특정 급여 이상 수령하는 모든 직원 리스트 조회 Service
* @param input
* @return empSalary
*/
public List<Employee> selectSalary(int input) {
// DAO 메소드 호출 후 수행 결과 반환
return dao.selectSalary(input);
}
/**
* 4. 신규 사원 정보 입력 Service
* @param newEmpOne
* @return result
*/
public int insertEmployee(Employee newEmpOne) {
// DAO 메소드 호출 후 수행 결과 반환
return dao.insertEmployee(newEmpOne);
}
/**
* 5. 입력한 사번에 해당하는 사원 정보 삭제 Service
* @param input
* @return result
*/
public int deleteEmployee(int input) {
// DAO 메소드 호출 후 수행 결과 반환
return dao.deleteEmployee(input);
}
/**
* 6. 입력한 사번에 해당하는 사원 정보 수정 Service
* @param emp
* @return result
*/
public int updateEmployee(int input, Employee emp) {
// DAO 메소드 호출 후 수행 결과 반환
return dao.updateEmployee(input, emp);
}
/**
* 7. 입력한 정보에 해당하는 부서의 보너스율 수정 Service
* @param emp
* @return result
*/
public int updateBonus(Employee emp) {
// DAO 메소드 호출 후 수행 결과 반환
return dao.updateBonus(emp);
}
}
▶ EmployeeDAO 클래스
public class EmployeeDAO {
// 필드 : JDBC 참조변수 선언 및 초기화
Connection conn =null; // DB 연결 정보를 담은 객체
Statement stmt = null; // Connection을 통해 SQL문을 DB에 전달하여 수행한 결과를 반환 받아오는 역할의 객체
ResultSet rs = null; // SELECT문 수행 성공 시 반환되는 결과 행의 집합을 나타내는 역할의 객체
PreparedStatement pstmt;
// Statement의 자식 클래스 / 조금 더 향상된 기능 제공
// ?(위치홀더) 이용하여 SQL문에 작성되는 리터럴을 동적으로 제어 가능
// 오타 위험 감소 / 가독성 향상
/**
* 1. 전체 사원 리스트 조회 DAO
* @return empList
*/
public List<Employee> selectAll() {
// 결과 저장용 변수 선언
List<Employee> empList = new ArrayList<>();
// JDBC 참조변수에 알맞는 객체 생성
try {
// OJDBC 드라이버 메모리 로드
Class.forName("oracle.jdbc.driver.OracleDriver");
// DriverManager를 통해 Connection 객체 생성
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","HOME_LKM","HOME1234");
// SQL문 작성
String sql = "SELECT * FROM EMPLOYEE2";
// Connection으로 Statement 객체 생성
stmt = conn.createStatement();
// Statement에 sql 적재하여 DB 전달해 수행 결과 행의 집합 반환 받아 ResultSet 변수 대입
rs = stmt.executeQuery(sql);
// 한 행씩 접근하여 원하는 컬럼 값 추출
while(rs.next()) {
int empId = rs.getInt("EMP_ID");
String empName = rs.getString("EMP_NAME");
String empNo = rs.getString("EMP_NO");
String email = rs.getString("EMAIL");
String phone = rs.getString("PHONE");
String deptCode = rs.getString("DEPT_CODE");
String jobCode = rs.getString("JOB_CODE");
String salLevel = rs.getString("SAL_LEVEL");
int salary = rs.getInt("SALARY");
double bonus = rs.getDouble("BONUS");
int managerId = rs.getInt("MANAGER_ID");
Date hireDate = rs.getDate("HIRE_DATE");
Date entDate = rs.getDate("ENT_DATE");
char entYn = rs.getString("ENT_YN").charAt(0);
// 매개변수 생성자 사용해 Employee 객체 생성
Employee emp = new Employee(entYn, empName, empNo, email, phone, deptCode, jobCode, salLevel, salary, bonus, managerId, hireDate, entDate, entYn);
// empList에 추가
empList.add(emp);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 사용한 자원 반환
try {
if(rs != null) rs.close();
if(stmt != null) stmt.close();
if(conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return empList;
}
/**
* 2. 사번으로 사원 정보 조회 DAO
* @param input
* @return empOne
*/
public Employee selectOne(int input) {
// 결과 저장용 변수 선언
Employee empOne = new Employee();
// JDBC 참조변수에 알맞는 객체 생성
try {
// OJDBC 드라이버 메모리 로드
Class.forName("oracle.jdbc.driver.OracleDriver");
// DriverManager 사용해 Connection 객체 생성
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","HOME_LKM","HOME1234");
// SQL문 작성
String sql = "SELECT * FROM EMPLOYEE2 WHERE EMP_ID = "+input;
// Statement 객체 생성(Connection 사용)
stmt = conn.createStatement();
// sql 적재하여 DB 전달 후 수행 결과 반환 받기
// Java에서 작성한 sql을 Statement 객체에 적재하여 DB에 전달한다.
// 수행된 결과 행의 집합(Result Set)을 DB에서 반환 받아 ResultSet 변수에 대입한다.
rs = stmt.executeQuery(sql);
// 결과 행에 접근하여 원하는 컬럼 값 추출하기
if(rs.next()) { // 사번에 해당하는 사원 한 명의 결과값만 추출
int empId = rs.getInt("EMP_ID");
String empName = rs.getString("EMP_NAME");
String empNo = rs.getString("EMP_NO");
String email = rs.getString("EMAIL");
String phone = rs.getString("PHONE");
String deptCode = rs.getString("DEPT_CODE");
String jobCode = rs.getString("JOB_CODE");
String salLevel = rs.getString("SAL_LEVEL");
int salary = rs.getInt("SALARY");
double bonus = rs.getDouble("BONUS");
int managerId = rs.getInt("MANAGER_ID");
Date hireDate = rs.getDate("HIRE_DATE");
Date entDate = rs.getDate("ENT_DATE");
char entYn = rs.getString("ENT_YN").charAt(0);
empOne = new Employee(empId, empName, empNo, email, phone, deptCode, jobCode, salLevel, salary, bonus, managerId, hireDate, entDate, entYn);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 사용한 자원 반환
try {
if(rs != null) rs.close();
if(stmt != null) stmt.close();
if(conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return empOne;
}
/**
* 3. 특정 급여 이상 수령하는 모든 직원 리스트 조회 DAO
* @param input
* @return empSalary
*/
public List<Employee> selectSalary(int input) {
// 결과 저장용 변수 선언
List<Employee> empSalary = new ArrayList<>();
// JDBC 참조변수에 알맞은 개별 객체 생성
try {
// OJDBC 드라이버 메모리 로드
Class.forName("oracle.jdbc.driver.OracleDriver");
// DriverManager 이용해 Connection 객체 생성
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","HOME_LKM","HOME1234");
// SQL문 작성
String sql = "SELECT * FROM EMPLOYEE2 WHERE SALARY >="+input+" ORDER BY SALARY DESC";
// Statement 객체 생성(Connection을 통해)
stmt = conn.createStatement();
// DB에서 수행한 결과 행의 집합 반환 받아 ResultSet 변수 대입
rs = stmt.executeQuery(sql);
// 한 행씩 접근하여 원하는 컬럼 값 출력하기
while(rs.next()) {
int empId = rs.getInt("EMP_ID");
String empName = rs.getString("EMP_NAME");
String empNo = rs.getString("EMP_NO");
String email = rs.getString("EMAIL");
String phone = rs.getString("PHONE");
String deptCode = rs.getString("DEPT_CODE");
String jobCode = rs.getString("JOB_CODE");
String salLevel = rs.getString("SAL_LEVEL");
int salary = rs.getInt("SALARY");
double bonus = rs.getDouble("BONUS");
int managerId = rs.getInt("MANAGER_ID");
Date hireDate = rs.getDate("HIRE_DATE");
Date entDate = rs.getDate("ENT_DATE");
char entYn = rs.getString("ENT_YN").charAt(0);
// 추출한 결과를 저장하기 위한 객체 생성
Employee emp = new Employee(empId, empName, empNo, email, phone, deptCode, jobCode, salLevel, salary, bonus, managerId, hireDate, entDate, entYn);
// List에 추가
empSalary.add(emp);
}
} catch (Exception e) {
// 최상위 예외처리 클래스 Exception으로 자식 클래스 커버
e.printStackTrace();
}
// 수행 결과 반환
return empSalary;
}
/**
* 4. 신규 사원 정보 입력 DAO
* @param newEmpOne
* @return result
*/
public int insertEmployee(Employee newEmpOne) {
int result = 0; // 결과 저장용 변수 선언 및 초기화
// JDBC 참조변수에 알맞는 개별 객체 생성
try {
// OJDBC 드라이버 메모리 로드
Class.forName("oracle.jdbc.driver.OracleDriver");
// Connection 객체 생성(DriverManager 사용)
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","HOME_LKM","HOME1234");
// + 자동 COMMIT 비활성화
conn.setAutoCommit(false);
// 활성화 상태인 경우, SQL이 수행되자마자 COMMIT 확정됨
// SQL문 작성
String sql = "INSERT INTO EMPLOYEE2 VALUES(?,?,?,?,?,?,?,'S1',?,?,200,'2000-01-01','2024-01-01','Y')";
// PreparedStatement 객체 생성(SQL문 적재)
pstmt = conn.prepareStatement(sql);
/*
* PreparedStatment : Connction 객체 생성 -> SQL문 작성(?,위치홀더 사용)
* -> PreparedStatement 객체 생성(SQL문 적재) -> 위치홀더에 알맞은 값 대입
* -> SQL문 수행 후 결과 반환 받아오기
*
* Statement : Connection 객체 생성 -> SQL문 작성
* -> Statement 객체 생성 -> SQL문 수행 후 결과 반환 받아오기
* */
// 위치홀더에 알맞은 값을 대입
pstmt.setInt(1, newEmpOne.getEmpId());
pstmt.setString(2, newEmpOne.getEmpName());
pstmt.setString(3, newEmpOne.getEmpNo());
pstmt.setString(4, newEmpOne.getEmail());
pstmt.setString(5, newEmpOne.getPhone());
pstmt.setString(6, newEmpOne.getDeptCode());
pstmt.setString(7, newEmpOne.getJobCode());
pstmt.setInt(8, newEmpOne.getSalary());
pstmt.setDouble(9, newEmpOne.getBonus());
// SQL 수행 후 결과 반환
result = pstmt.executeUpdate();
// DML은 성공한 행의 개수를 반환 / 조건에 맞는 행이 없으면 0을 반환
/*
* SELECT문 수행 시
* 1) Statement : stmt.executeQuery(sql);
* 2) PreparedStatement : pstmt.executeQuery();
*
* DML 수행 시 (executeUpdate 사용)
* 1) Statement : stmt.executeUpdate(sql);
* 2) PreparedStatement : pstmt.executeUpdate();
* */
// + 트랜잭션 제어
if(result > 0 ) conn.commit(); // DML 성공 시 COMMIT 수행
else conn.rollback(); // DML 실패 시 ROLLBACK 수행
} catch (Exception e) {
e.printStackTrace();
} finally {
// 사용한 자원 반환
try {
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 수행 결과 반환
return result;
}
/**
* 5. 입력 받은 사번에 해당하는 사원 정보 삭제 DAO
* @param input
* @return result
*/
public int deleteEmployee(int input) {
int result = 0; // 결과 저장용 변수 선언 및 초기화
// JDBC 참조변수에 알맞은 개별 객체 생성
try {
// OJDBC 드라이버 메모리 로드
Class.forName("oracle.jdbc.driver.OracleDriver");
// Connection 객체 생성(DriverManager 활용)
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","HOME_LKM","HOME1234");
// 자동 커밋 제한
conn.setAutoCommit(false);
// SQL문 작성
String sql = "DELETE FROM EMPLOYEE2 WHERE EMP_ID = ?";
// PreaparedStatement 객체 생성 후 SQL문 적재
pstmt = conn.prepareStatement(sql);
// 위치홀더에 입력 값 대입
pstmt.setInt(1, input);
// SQL 수행 후 결과 반환 받아 오기
result = pstmt.executeUpdate();
// 트랜잭션 제어
if(result > 0) conn.commit();
else conn.rollback();
} catch (Exception e) {
e.printStackTrace();
} finally {
// 사용한 자원 반환
try {
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 수행 결과 반환
return result;
}
/**
* 6. 입력 받은 사번에 해당하는 사원 정보 수정 DAO
* @param emp
* @return result
*/
public int updateEmployee(int input, Employee emp) {
int result = 0; // 결과 저장용 변수 선언 및 초기화
// JDBC 참조변수에 알맞은 개별 객체 생성
try {
// OJDBC 드라이버 메모리 로드
Class.forName("oracle.jdbc.driver.OracleDriver");
// Conncetion 객체 생성(DriverManager 사용)
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","HOME_LKM","HOME1234");
// 자동 커밋 제한
conn.setAutoCommit(false);
// SQL문 작성
String sql = "UPDATE EMPLOYEE2 SET EMAIL = ?, PHONE = ?, SALARY = ? WHERE EMP_ID = ?";
// PreparedStatement 객체 생성 후 SQL문 적재
pstmt = conn.prepareStatement(sql);
// 위치홀더에 입력 값 대입
pstmt.setString(1, emp.getEmail());
pstmt.setString(2, emp.getPhone());
pstmt.setInt(3, emp.getSalary());
pstmt.setInt(4, input);
// SQL 수행 결과 반환 받아오기
result = pstmt.executeUpdate();
// 트랜잭션 제어
if(result > 0) conn.commit();
else conn.rollback();
} catch (Exception e) {
e.printStackTrace();
} finally {
// 사용한 자원 반환
try {
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 수행 결과 반환
return result;
}
/**
* 7. 입력 받은 정보에 해당하는 부서의 보너스율 수정 DAO
* @param emp
* @return result
*/
public int updateBonus(Employee emp) {
int result = 0; // 결과 저장용 변수 선언 및 초기화
// JDBC 참조변수에 알맞은 개별 객체 생성
try {
// OJDBC 드라이버 메모리 로드
Class.forName("oracle.jdbc.driver.OracleDriver");
// Connection 객체 생성(DriverManager 사용)
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","HOME_LKM","HOME1234");
// 자동 COMMIT 제한
conn.setAutoCommit(false);
// SQL문 작성
String sql = "UPDATE EMPLOYEE2 SET BONUS = ? WHERE DEPT_CODE =?";
// PreparedStatement 객체 생성(SQL문 적재)
pstmt = conn.prepareStatement(sql);
// 위치홀더에 입력 값 대입
pstmt.setDouble(1, emp.getBonus());
pstmt.setString(2, emp.getDeptCode());
// SQL문 수행 결과 반환 받아오기
result = pstmt.executeUpdate();
// 트랜잭션 제어
if(result > 0) conn.commit();
else conn.rollback();
} catch (Exception e) {
e.printStackTrace();
} finally {
// 사용한 자원 반환
try {
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 수행 결과 반환
return result;
}
}
▶ Employee 클래스
public class Employee {
// 필드
private int empId;
private String empName;
private String empNo;
private String email;
private String phone;
private String deptCode;
private String jobCode;
private String salLevel;
private int salary;
private double bonus;
private int managerId;
private Date hireDate; // java.sql.Date
private Date entDate;
private char entYn;
// 기본 생성자
public Employee() { }
// 매개변수 생성자(Total)
public Employee(int empId, String empName, String empNo, String email, String phone, String deptCode,
String jobCode, String salLevel, int salary, double bonus, int managerId, Date hireDate, Date entDate,
char entYn) {
super();
this.empId = empId;
this.empName = empName;
this.empNo = empNo;
this.email = email;
this.phone = phone;
this.deptCode = deptCode;
this.jobCode = jobCode;
this.salLevel = salLevel;
this.salary = salary;
this.bonus = bonus;
this.managerId = managerId;
this.hireDate = hireDate;
this.entDate = entDate;
this.entYn = entYn;
}
// 매개변수 생성자(EmployeeView 4번 메소드)
public Employee(int empId, String empName, String empNo, String email, String phone, String deptCode,
String jobCode, int salary, double bonus) {
super();
this.empId = empId;
this.empName = empName;
this.empNo = empNo;
this.email = email;
this.phone = phone;
this.deptCode = deptCode;
this.jobCode = jobCode;
this.salary = salary;
this.bonus = bonus;
}
// getter / setter
public int getEmpId() {
return empId;
}
public void setEmpId(int empId) {
this.empId = empId;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public String getEmpNo() {
return empNo;
}
public void setEmpNo(String empNo) {
this.empNo = empNo;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getDeptCode() {
return deptCode;
}
public void setDeptCode(String deptCode) {
this.deptCode = deptCode;
}
public String getJobCode() {
return jobCode;
}
public void setJobCode(String jobCode) {
this.jobCode = jobCode;
}
public String getSalLevel() {
return salLevel;
}
public void setSalLevel(String salLevel) {
this.salLevel = salLevel;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public double getBonus() {
return bonus;
}
public void setBonus(double bonus) {
this.bonus = bonus;
}
public int getManagerId() {
return managerId;
}
public void setManagerId(int managerId) {
this.managerId = managerId;
}
public Date getHireDate() {
return hireDate;
}
public void setHireDate(Date hireDate) {
this.hireDate = hireDate;
}
public Date getEntDate() {
return entDate;
}
public void setEntDate(Date entDate) {
this.entDate = entDate;
}
public char getEntYn() {
return entYn;
}
public void setEntYn(char entYn) {
this.entYn = entYn;
}
// toString
@Override
public String toString() {
return "사원 리스트 [ 사번: " + empId + ", 사원명: " + empName + ", 사원 주민번호: " + empNo + ", 이메일주소: " + email
+ ", 연락처: " + phone + ", 부서코드: " + deptCode + ", 직급코드: " + jobCode + ", 급여등급: " + salLevel
+ ", 급여: " + salary + ", 보너스: " + bonus + ", 사수번호: " + managerId + ", 입사일: " + hireDate
+ ", 사직일: " + entDate + ", 사직여부: " + entYn + " ]";
}
}
▶ EmployeeRun 클래스
public class EmployeeRun {
public static void main(String[] args) {
EmployeeView view = new EmployeeView();
view.displayMenu();
}
}