본문 바로가기

카테고리 없음

개인 프로젝트 JDBC 연동하기 (2) 삭제

 

현재 진행 중인 개인 프로젝트에 

직원 정보를 삭제하는 기능을 추가했다 

System.out.println("4. 직원 정보 삭제하기");

 

switch문을 사용하여 

사용자가 숫자 4를 입력하면 

deleteEmp();  메소드로 

이동하게끔 만들었다

case 4:
    deleteEmp();
break;

 


 

public void deleteEmp(){

    System.out.println("정말 삭제하겠습니까? (y/n)");
    String yn  = sc.nextLine().toUpperCase();
    if (!(yn.equals("Y"))) {
        System.out.println("직원 목록 메뉴로 돌아갑니다. ");
        empListMenu();
    }else {
        System.out.println("삭제할 사원 번호 : ");
        try {
            int empNum = sc.nextInt();
            nc.deleteEmp(empNum);
        }catch (InputMismatchException e){
            System.out.println("삭제할 사원의 사번을 입력하셔야 됩니다. " + e.getMessage());
            sc.nextLine();
        }
    }
}

 

 

직원 삭제는 사번을 통해서 삭제가 되므로 

int형 입력을 주게 만들었다.

 

해고여부를 통해서 그만둔 직원도 여부를 남기기 위해서 

직원 정보 삭제는 조금 민감감 사항 같으므로 

다시 한 번 물어보고 삭제가 되게 만들었다. 

 

사용자가 Y를 누를 시 

nc.deleteEmp(empNum);

 

컨트롤러 부분에 사용자에게 입력받은 정수형 데이터를 넘기게 만들었다

public void deleteEmp(int empNo){

    int result = new EmployeeService().deleteEmp(empNo);

    if(result > 0 ){
        new EmployeeMenu().CheckSuccess("직원 정보 삭제가 완료 되었습니다");
    }else {
        new EmployeeMenu().CheckSuccess("직원 정보 삭제가 실패 했습니다.");
    }
}

 

메소드가 실행에 정상적으로 성공을 한다면 1을 반환 

1이 반환 된다면 정보 삭제가 완료 되었다는 

String 문자를 반환 

 

삭제가 실패한다면 0을 반환되므로 

직원 정보 삭제 실패 메세지를 반환하게 만들었다 

 

int result = new EmployeeService().deleteEmp(empNo);

 

Service 클래스의 deleteEmp 메소드에 다시 전달 받은 매개변수를 넘겨준다 

 

public int deleteEmp(int empNo){
    Connection conn = JDBCTemplate.getConnection();

    int result = new EmployeeDao().deleteEmp(conn, empNo);

    if(result > 0){
        JDBCTemplate.commit(conn);
    }else {
        JDBCTemplate.rollback(conn);
    }
    JDBCTemplate.close(conn);

    return result;

}

 

Service 클래스의 deleteEmp메소드 

전달 받은 매개변수를 다시 DAO에 넘겨주고 

실행에 성공하면 commit을 

실패한다면 rollback을 해준다

 

 

DAO 클래스 : deleteEmp 

public int deleteEmp(Connection conn , int empId){
    int result = 0;
    PreparedStatement pstmt = null;
    String sql = prop.getProperty("deleteEmp");
    try{
        pstmt = conn.prepareStatement(sql);
        pstmt.setInt(1, empId);

        result = pstmt.executeUpdate();
    }catch (SQLException e){
        e.printStackTrace();
    }finally {
        JDBCTemplate.close(pstmt);
    }
    return result;
}

 

 

PreparedStatement : SQL 쿼리를 안전하게 실행을 시켜 주는 인터페이스이다 

사용하면 SQL 쿼리를 미리 컴파일하여 SQL 인젝션 공격을 방지할 수 있다 

 

conn은 데이터베이스에 연결된 Connection 객체이다 

 

 

 

executeUpdate() : 
INSERT, UPDATE, DELETE와 같은 쿼리의 경우 

executeUpdate() 메소드를 통해서 업데이트를 해줘야 된다.