2020년 11월 16일

업데이트:


EmpRun.java

public class EmpRun {
	public static void main(String[] args) {
		new EmpView().displayMain();
		
	}
}



EmpView.java

import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;

import com.kh.scott.model.service.EmpService;
import com.kh.scott.model.vo.Emp;

// View
// - 사용자의 요청을 입력받고, 응답을 출력하는 부분(화면)

public class EmpView {
  	private Scanner sc = new Scanner(System.in);
    private EmpService empService = new EmpService();

    // 메인 메뉴 역할
    public void displayMain() {
		int sel = 0;
		do {
			try { // 메뉴 입력 예외 처리 부분
				System.out.println();
				System.out.println("====================================");
				System.out.println("[Main Menu]");
				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("0. 프로그램 종료");
				System.out.println("====================================");
				
				System.out.print("메뉴 선택 : ");
				sel = sc.nextInt();
				sc.nextLine();
				System.out.println();
				
				switch(sel) {
				case 1 : selectAll(); break; // 1_1. 같은 클래스에 있는 selectAll()을 호출
				case 2 : 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("잘못 입력하셨습니다.");
				}
	
			}catch(InputMismatchException e) {
				System.out.println("숫자만 입력해주세요.");
				sel = -1;
				sc.nextLine();
			}
		}while(sel != 0);
	}

  public void selectAll() {
    System.out.println("[전체 사원 정보 조회]");
    
    //1_3. EmpService.selectAll()을 호출하여 
    // 	     전체 사원 정보가 담겨있는 List를 반환 받기
    
    List<Emp> empList = empService.selectAll();
    
    
    // 1_11. 전체 사원 조회 결과 출력
    if(empList == null) {  // DB 연결 간 문제 발생으로 empList 객체가 생성되지 않은 경우
      System.out.println("전체 사원 정보 조회 과정에서 오류가 발생했습니다.");
      
    } if(empList.isEmpty()) {
      // DB 연결, 조회는 성공했으나 조회 결과가 없는 경우
      System.out.println("조회 결과가 없습니다.");
      
    } else {
      // 조회 성공 시 
      for(Emp emp : empList) {
        System.out.println(emp);
      }
    }
  }

  	//2_2. 사번을 입력받아 사원 한 명의 정보를 조회하는 View
	private void selectOne() {
		System.out.println("[사번으로 사원 정보 조회]");
		System.out.print("사번 입력 : ");
		int empNo = sc.nextInt();
		sc.nextLine();
		
		Emp emp = empService.selectOne(empNo);
		
		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());
		}
	}

  	private void selectOne2() {
		System.out.println("[사번, 이름이 모두 일치하는 사원 정보 조회]");
		System.out.print("사번 입력 : ");
		int inputNo = sc.nextInt();
		sc.nextLine();
		System.out.print("이름 입력 : ");
		String inputName = sc.nextLine();
		
		Emp emp = empService.selectOne2(inputNo, inputName);
		
		
		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());
		}
	}

  // 3. 새로운 사원 정보 삽입용 View
	private void insertEmp() {
		System.out.println("[새로운 사원 정보 추가]");
		
		System.out.print("사번 : ");
		int empNo = sc.nextInt();
		sc.nextLine();
		
		System.out.print("이름 : ");
		String eName = sc.nextLine();
		
		System.out.print("직책 : ");
		String job = sc.nextLine();
		
		System.out.print("직속 상사 사번 : ");
		int mgr = sc.nextInt();
		sc.nextLine();
		
		// HIREDATE는 insert 구문에서 SYSDATE로 작성
		
		System.out.print("급여 : ");
		int sal = sc.nextInt();
		
		System.out.print("커미션 : ");
		int comm = sc.nextInt();
		
		System.out.print("부서 번호 :");
		int deptNo = sc.nextInt();
		sc.nextLine();
		
		
		// 3_1. 입력받은 사원 정보를 하나의 Emp 객체에 저장할 수 있도록
		// Emp 클래스에 생성자를 새로 작성한 후 객체 생성
		Emp emp = new Emp(empNo, eName, job, mgr, sal, comm, deptNo);
		
		// 3_2. EmpService 객체의 insertEmp(emp) 메소드를 호출하여
		// 데이터를 DB에 삽입한 후 결과를 반환 받는다.
		int result = empService.insertEmp(emp);
		
		// 3_13. 삽입 결과에 따라 출력하기
		if(result > 0) {
			System.out.println("사원 정보 삽입 성공!!!!");
		} else {
			System.out.println("사원 정보 삽입 실패....");
		}
	}

  private void updateEmp() {
		System.out.println("[사번으로 사원 정보 수정]");
		
		//1단계 : 사번을 입력받아 해당 사번을 가진 사원이 있는지 확인
		System.out.print("정보를 수정할 사원의 사번 입력 : ");
		int empNo = sc.nextInt();
		sc.nextLine();
		
		
		// selectOne(empNo) 재활용
		//Emp emp = empService.selectOne(empNo);
		
		
		//existsEmp(empNo) 메소드를 새로 작성
		int check = empService.existsEmp(empNo);
		
				
		//2단계  : 1단계의 결과로 있다고 판별된 경우 수정할 정보를 입력받은 후 DB 내용을 수정함
		//if(emp != null) {
			// 수정할 정보 입력받기
		if(check > 0) {
			System.out.print("직책 : ");
			String job = sc.nextLine();
			System.out.print("급여 : ");
			int sal = sc.nextInt();
			System.out.println("커미션 : ");
			int comm = sc.nextInt();
			sc.nextLine();
			
			
			// 입력받은 값을 한 번에 전달하기 위한 Emp 객체 생성
			Emp temp = new Emp(empNo, job, sal, comm);
			
			// 생성한 Emp 객체를 DB에 전달하고 결과를 반환받기
			// DML 수행 결과가 행의 개수(int형)로 반환 될 것을 예상해서 
			// 미리 int result로 수행 결과를 받도록 작성
			int result = empService.updateEmp(temp);
			
			// DB 수정 결과에 따른 결과 출력
			if(result > 0) {
				System.out.println("수정 성공!!!");
			} else {
				System.out.println("수정 실패...");
			}
		} else {
			System.out.println("해당 사번을 가진 사원이 없습니다.");
		}
	}


  private void deleteEmp() {
		
		// 1단계 : 입력받은 사번을 가진 사원이 존재하는지 확인
		
		// 2단계 : 1단계 결과가 있다고 판별된 경우
		// "정말 삭제하시겠습니까? (Y/N) 출력 후"
		// 'Y'를 입력한 경우 DB에서 삭제
		System.out.println("[사번으로 사원 정보 삭제]");

		System.out.print("정보를 삭제할 사원의 사번 입력 : ");
		int empNo = sc.nextInt();
		sc.nextLine();

		int check = empService.existsEmp(empNo);
		if (check > 0) {
			System.out.print("정말 삭제하시겠습니까?(Y/N) :");
			char yn = sc.nextLine().toUpperCase().charAt(0);
			if (yn == 'Y') {
				int result = empService.deleteEmp(empNo);
				if(result > 0) System.out.println("삭제 성공!!!!");
				else System.out.println("삭제 실패...");
			}else {
				System.out.println("삭제를 취소하셨습니다.");
			}
		} else {
			System.out.println("해당 사번을 가진 사원이 없습니다.");
		}
	}
}



EmpService.java

import java.util.List;
import com.kh.scott.model.dao.EmpDAO;
import com.kh.scott.model.vo.Emp;

// Service (비즈니스 로직 처리)
// 1) 전달받은 데이터 또는 DAO의 수행 결과 데이터를 필요한 형태로 가공 처리


public class EmpService {
	
	private EmpDAO empDAO = new EmpDAO();
	public List<Emp> selectAll() {
		
		// 1_4. 전체 사원 정보 조회는 별도의 데이터 가공 처리가 필요 없음
		// -- > 바로 EmpDAO.selectAll()을 호출하여 결과를 반환받아야 함.
		List<Emp> empList = empDAO.selectAll();
		
		
		// 1_10. DAO 반환 데이터의 가공처리가 필요 없으므로 그대로 다시 반환
		return empList;
	}

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

	public Emp selectOne2(int inputNo, String inputName) {
		// 대소문자 구분없이 모두 검색 가능하게 하는 방법
		// -> 입력받은 값, SQL에서 조회된 조건을 모두 대문자 또는 소문자로 통일
	
		return empDAO.selectOne2(inputNo, inputName.toUpperCase());
	}

	// 3. 새로운 사원 정보 삽입용 Service
	public int insertEmp(Emp emp) {
		
		// 3_3. 전달 받은 emp를 EmpDAO 객체의 insertEmp(emp)를 전달하여
		// 결과를 반환 받음.
		
		int result = empDAO.insertEmp(emp);
		
		//3_12. DB 수행 결과를 그대로 반환
		return result; // 반환형 int로 수정
	}

	// 사원 정보 수정용 Service
	public int updateEmp(Emp temp) {
		// View에서 전달받은 emp를 DAO로 전달하고 반환받은 결과를 다시 view로 전달
		
		return empDAO.updateEmp(temp);
	}

	// 사번이 일치하는 사원 유무 판단용 service
	public int existsEmp(int empNo) {
	
		// 별도의 가공 처리 없이 EmpDAO.existsEmp(empNo)를 호출하여
		// 결과를 바로 view에 반환
		return empDAO.existsEmp(empNo);
	}

	public int deleteEmp(int empNo) {
		return empDAO.deleteEmp(empNo);
	}
}



Emp.java

import java.sql.Date;
/* VO(Value Object) === DTO(Data Transfer Object)
 * --> DB 테이블의 한 행의 정보가 기록되는 저장용 객체
 *  
 *  1. 반드시 캡슐화 적용
 *  2. getter/setter 반드시 작성
 *  3. 기본 생성자 필수, 매개변수 있는 생성자 선택
 *  4. VO에 로직이 포함된 메소드는 지양
 *  
 *  */


public class Emp {
	private int empNo; // 사번
	private String eName; // 이름
	private String job; // 직책
	private int mgr; // 직속 상사
	
	// java.sql.Date
	private Date hireDate; // 입사일
	private int sal; // 급여
	private int comm; // 커미션
	private int deptNo; // 부서번호
	
	
	// 기본 생성자
	public Emp() {
	}

	// 사원 정보 수정을 위한 생성자
	public Emp(int empNo, String job, int sal, int comm) {
		super();
		this.empNo = empNo;
		this.job = job;
		this.sal = sal;
		this.comm = comm;
	}

	// 사원 정보 삽입을 위해서 만든 생성자
	public Emp(int empNo, String eName, String job, int mgr, int sal, int comm, int deptNo) {
		super();
		this.empNo = empNo;
		this.eName = eName;
		this.job = job;
		this.mgr = mgr;
		this.sal = sal;
		this.comm = comm;
		this.deptNo = deptNo;
	}

	public Emp(int empNo, String eName, String job, int mgr, Date hireDate, int sal, int comm, int deptNo) {
		this(empNo, eName, job, mgr, sal, comm, deptNo);
		this.hireDate = hireDate;
	}


	public int getEmpNo() {
		return empNo;
	}


	public void setEmpNo(int empNo) {
		this.empNo = empNo;
	}


	public String geteName() {
		return eName;
	}


	public void seteName(String eName) {
		this.eName = eName;
	}


	public String getJob() {
		return job;
	}


	public void setJob(String job) {
		this.job = job;
	}


	public int getMgr() {
		return mgr;
	}


	public void setMgr(int mgr) {
		this.mgr = mgr;
	}


	public Date getHireDate() {
		return hireDate;
	}


	public void setHireDate(Date hireDate) {
		this.hireDate = hireDate;
	}


	public int getSal() {
		return sal;
	}


	public void setSal(int sal) {
		this.sal = sal;
	}


	public int getComm() {
		return comm;
	}


	public void setComm(int comm) {
		this.comm = comm;
	}


	public int getDeptNo() {
		return deptNo;
	}


	public void setDeptNo(int deptNo) {
		this.deptNo = deptNo;
	}


	@Override
	public String toString() {
		return "Emp [empNo=" + empNo + ", eName=" + eName + ", job=" + job + ", mgr=" + mgr + ", hireDate=" + hireDate
				+ ", sal=" + sal + ", comm=" + comm + ", deptNo=" + deptNo + "]";
	}
}



EmpDAO.java

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import com.kh.scott.model.vo.Emp;

public class EmpDAO {
	
	
	// DB에 있는 EMP 테이블의 모든 사원 정보를 조회 DAO
	public List<Emp> selectAll() {
		
		Connection conn = null;
		Statement stmt = null;
		ResultSet rset = null;
		
		List<Emp> empList = null;
		// DB에서 조회한 결과를 저장할 List
		
		try {
			//1_5. JDBC 드라이버 클래스 메모리에 로드
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			
			//1_6. DB와의 연결 작업 준비
			conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe", "scott", "tiger");

			// 1_7. DB 접속 성공 시 DB에다가 전달할 SQL 구문을 준비하고
			// 이를 전달하여 결과를 얻어올 객체 Statement 객체 생성
			String query = "SELECT * FROM EMP ORDER BY EMPNO";


			stmt = conn.createStatement();
			rset = stmt.executeQuery(query);
			
			// 1_8. ResultSet rset에 있는 SELECT 처리 결과를
			// JAVA 단에서 쉽게 사용할 수 있도록
			// List 객체에 저장 시키기
			empList = new ArrayList<Emp>();
			
			
			while(rset.next()) {
				// ResultSet.next() : 반환받은 조회 결과를 커서를 이용해 순차적으로 한 행씩 접근
				// 접근한 행이 존재하면 true, 없으면 false	
				
				int empNo = rset.getInt("EMPNO"); // 7369
				String eName = rset.getString("ENAME"); // SMITH
				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");
				
				empList.add(new Emp(empNo, eName, job, mgr, hireDate, sal, comm, deptNo));
			}
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			// 1_9. JDBC 관련 객체 연결 끊기(자원 반환)
			try {
				if(rset != null) rset.close();
				if(stmt != null) stmt.close();
				if(conn != null) conn.close();
			}catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return empList;
	}


	public Emp selectOne(int empNO) {
		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;
			
			stmt = conn.createStatement();
			rset = stmt.executeQuery(query);
			
			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 = new Emp(empNo, 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;
	}

	public Emp selectOne2(int inputNo, String inputName) {
		Connection conn = null;
		Statement stmt = null;
		ResultSet rset = null;
		Emp emp = null;
		
		try {
			// SQL 작성
			String query = "SELECT * FROM EMP WHERE EMPNO = " + inputNo + 
					"AND UPPER(ENAME) = '" + inputName + "'";
			
			stmt = conn.createStatement();
			rset = stmt.executeQuery(query);
			
			if(rset.next()) {
				int empNo = rset.getInt("EMPNO"); 
				String eName = rset.getString("ENAME");
				String job = rset.getString("JOB");
				int mgr = rset.getInt("MGR");			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe",
					"scott", "tiger");
				Date hireDate = rset.getDate("HIREDATE");
				int sal = rset.getInt("SAL");
				int comm = rset.getInt("COMM");
				int deptNo = rset.getInt("DEPTNO");
				
				emp = new Emp(empNo, 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) rset.close();
				if(conn != null) rset.close();
			} catch(SQLException e) {
				e.printStackTrace();
			}
		}
		return emp;
	}
	
	// 3. 새로운 사원 정보 삽입용 DAO
	public int insertEmp(Emp emp) {
		// 3_4. JDBC 드라이버 등록 및 DB 연결 관련 변수 선언
		Connection conn = null;

		PreparedStatement pstmt = null;
		
		int result = 0;
		/* PreparedStatement
		 * - Statement의 자식으로 좀 더 향상된 기능을 제공함.
		 * - ? (위치 홀더)를 이용하여 SQL에 작성되는
		 * 	 리터럴 값을 동적으로 작성함.
		 * 
		 * - 코드 안정성과 가독성이 증가함
		 * - 코드길이가 늘어나는 단점이 존재함
		 * 
		 */
		
		try {
		
		//3_5. JDBC 드라이버 로드 및 커넥션 얻어오기.
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe",
					"scott", "tiger");
			
			//3_6. 자동 커밋 방지
			// JDBD에서 DML 구문 수행 시 별도 조작이 없으면
			// 한 행이 수행되자마자 commit이 수행됨
			conn.setAutoCommit(false);
			// --> 한 행 수행 시 자동 COMMIT이 되지 않게함
			// 단, 추후 COMMIT, ROLLBACK 없이 
			// conn.close();가 수행되면 모든 내용이 commit됨
			
			// 3_7. SQL 작성 후 PreparedStatement 객체 생성
			String query = 
					"INSERT INTO EMP VALUES(?, ?, ?, ?, SYSDATE, ?, ? ,?)";
			
			pstmt = conn.prepareStatement(query);
			
			// 3_8. SQL 구문의 ?(위치 홀더)에 알맞은 값 대입
			pstmt.setInt(1, emp.getEmpNo());
			pstmt.setString(2, emp.geteName());
			pstmt.setString(3, emp.getJob());
			pstmt.setInt(4, emp.getMgr());
			pstmt.setInt(5, emp.getSal());
			pstmt.setInt(6, emp.getComm());
			pstmt.setInt(7, emp.getDeptNo());

			
			// 3_9. SQL 구문 수행 결과를 전달받음
			// DML 구문 수행시 exectuteUpdate() 호출
			
			// DB에서 DML 구문 수행 시 DML 구문 수행이 성공한 행의 개수를 반환하다.
			result = pstmt.executeUpdate();
			// executeUpdate() : DML의 성공한 행의 개수를 반환
			// executeQuery() : SELECT의 조회 결과인 ResultSet 반환
			
			// 트랜잭션 처리(commit, rollback 처리)
			if(result > 0) conn.commit();
			else conn.rollback(); 
			
		}catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				//3_10. 사용한 JDBC 객체 반환
				if(pstmt != null) pstmt.close();
				if(conn != null) conn.close();
			}catch (Exception e) {
				e.printStackTrace();
			}
		}
		// 3_11. DML 수행 결과(result)를 반환
		return result;
	}

	public int updateEmp(Emp emp) {
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		int result = 0; // 결과 저장용 변수
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe",
					"scott", "tiger");
			
			conn.setAutoCommit(false); //DML 자동 커밋 방지
			
			String query = "UPDATE EMP SET JOB=?, SAL=?, COMM=? WHERE EMPNO = ?";
			pstmt = conn.prepareStatement(query);
			
			pstmt.setString(1, emp.getJob());
			pstmt.setInt(2, emp.getSal());
			pstmt.setInt(3, emp.getComm());
			pstmt.setInt(4, emp.getEmpNo());
			
			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 (Exception e) {
				e.printStackTrace();
			}
		}
		return result;
	}

	
	// 사번이 일치하는 사원 유무 판단용 DAO
	public int existsEmp(int empNo) {
		// JDBC 관련 변수 선언 및 결과 저장 변수 선언
		Connection conn = null;
		Statement stmt = null;
		ResultSet rset = null;
		
		int result = 0;
		
		try {
			// JDBC 드라이버 로드 및 커넥션 얻어오기
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe",
					"scott", "tiger");
			 
			String query = "SELECT COUNT(*) FROM EMP WHERE EMPNO = " + empNo;

			stmt = conn.createStatement();
			
			// SQL 수행 및 결과 반환
			rset = stmt.executeQuery(query);
			
			// 조회 결과가 있을 경우 해당 결과를 result에 저장
			if(rset.next()) {
				result = rset.getInt(1); // 조회 결과 컬럼 인덱스
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 사용한 JDBC 객체 반환
			try {
				if(rset != null) rset.close();
				if(stmt != null) stmt.close();
				if(conn != null) conn.close();
				
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
		return result;
	}

	public int deleteEmp(int empNo) {
		Connection conn = null;
		PreparedStatement pstmt = null;

		
		int result = 0;
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe",
					"scott", "tiger");
			
			conn.setAutoCommit(false);
			
			String query = "DELETE FROM EMP WHERE EMPNO = " + empNo;
			pstmt = conn.prepareStatement(query);
			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 (Exception e) {
				e.printStackTrace();
			}
		}
		return result;
	}
}



태그: ,

카테고리:

업데이트:

댓글남기기