저번 프로젝트 파일에 이어서
설명(주석)과 함께 예제를 올립니다.
employee는 생성자가 약간 수정되었다.
package model.vo; import java.sql.Date; // 보통 vo 클래스 파일의 이름을 DB의 이름과 같게한다. // vo(value object) == entity == record == row // do(domain object) == dto(data transfer object) // DB 테이블의 한 행의 정보가 기록되는 저장용 객체 // 1. 반드시 캡슐화가 적용되어야 한다 : 모든 필드는 private가 된다. // 2. 기본 생성자와 매개변수 있는 생성자를 작성해야 한다. (매개변수가 있는 생성자가 있다면 기본 생성자를 jvm에서 생성해주지 않기 때문) // 3. 모든 필드에 대해 getter와 setter 작성해야 한다. // 4. 직렬화 처리를 해야 한다. // optional. toString() 오버라이딩 <- 필드값을 확인하기 위해 public class Employee implements java.io.Serializable{ private int empNo; private String empName; private String job; private int mgr; private Date hireDate; private int sal; private int comm; private int deptNo; // 이러한 객체를 vo 객체라고 할 수 있다. public Employee() { } public Employee(int empNo, String empName, String job, int mgr, Date hireDate, int sal, int comm, int deptNo) { super(); this.empNo = empNo; this.empName = empName; this.job = job; this.mgr = mgr; this.hireDate = hireDate; this.sal = sal; this.comm = comm; this.deptNo = deptNo; } public Employee(int empNo, String empName, String job, int mgr, int sal, int comm, int deptNo) { super(); this.empNo = empNo; this.empName = empName; this.job = job; this.mgr = mgr; this.sal = sal; this.comm = comm; this.deptNo = deptNo; } public Employee(int empNo, String job, int sal, int comm) { super(); this.empNo = empNo; this.job = job; this.sal = sal; this.comm = comm; } public int getEmpNo() { return empNo; } public void setEmpNo(int empNo) { this.empNo = empNo; } public String getEmpName() { return empName; } public void setEmpName(String empName) { this.empName = empName; } 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; } }
testMain은 주석을 지워가며 한개 씩 테스트 해보세요.
package controller; import model.dao.JDBCModel; import model.vo.Employee; public class TestMain { public static void main(String[] args) { JDBCModel model = new JDBCModel(); // 전체 조회 // model.testJDBC(); // 사번 전달하여 조회 // model.testJDBC2(7839); // 객체 생성 후 삽입 // Employee emp = new Employee(7777, "JARON", "ANALYST", 9999, 12000, 90, 10); // model.testInsert(emp); // 객체 생성 후 업데이트 // Employee e = new Employee(7777, "CHAIRMAN", 50000000, 100000000); // model.testUpdate(e); // 업데이트 후 전체 조회 // model.testJDBC(); // 사번 전달 후 삭제 // model.testDelete(7777); // 삭제 후 전체 조회 // model.testJDBC(); } }
JDBC 모델은 메인에서 호출한 다양한 기능들을 작성하였다.
package model.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import model.vo.Employee; public class JDBCModel { // 사원 전체 조회용 메소드 public void testJDBC() { Connection conn = null; Statement stmt = null; ResultSet rset = null; // ctrl + shift + O 를 누르면 import 해야하는 항목이 나옴. // 1. 해당 데이터 베이스에 대한 라이브러리 등록 작업 // Class.forName("클래스명"); // ClassNotFoundException 처리를 해야 함 try { Class.forName("oracle.jdbc.driver.OracleDriver"); // 2.데이터베이스와 연결함 // SQLException 처리를 해야한다. conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe", "scott", "tiger"); System.out.println(conn); // 3. 쿼리문 작성 후 DB에서 쿼리문 실행시키고 결과를 가지고 옴 String query = "SELECT * FROM EMP"; stmt = conn.createStatement(); rset = stmt.executeQuery(query); while (rset.next()) { System.out.println(rset.getInt("EMPNO") + ", " + rset.getString("ENAME") + ", " + rset.getString("JOB") + ", " + rset.getInt("MGR") + ", " + rset.getDate("HIREDATE") + ", " + rset.getInt("SAL") + ", " + rset.getInt("COMM") + ", " + rset.getInt("DEPTNO") ); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { try { // 4. DB와 관련된 객체는 반드시 close 해야 함 rset.close(); stmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } public void testJDBC2(int empNo) { Connection conn = null; Statement stmt = null; ResultSet rset = 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); while (rset.next()) { System.out.println(rset.getInt("EMPNO") + ", " + rset.getString("ENAME") + ", " + rset.getString("JOB") + ", " + rset.getInt("MGR") + ", " + rset.getDate("HIREDATE") + ", " + rset.getInt("SAL") + ", " + rset.getInt("COMM") + ", " + rset.getInt("DEPTNO") ); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { try { rset.close(); stmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } public void testInsert(Employee emp) { Connection conn = null; Statement stmt = null; int result = 0; // 문자열의 경우 ''을 추가해야 함을 주의하자 String query = "INSERT INTO EMP(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)" + "VALUES(" + emp.getEmpNo() + ", '" + emp.getEmpName() + "', '" + emp.getJob() + "', " + emp.getMgr() + ", " + "SYSDATE, " + emp.getSal() + ", " + emp.getComm() + ", " + emp.getDeptNo() + ")"; System.out.println(query); try { Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "scott", "tiger"); stmt = conn.createStatement(); result = stmt.executeUpdate(query); if(result > 0) { // DB와 마찬가지로 commit rollback을 상황에 맞게 해야한다. System.out.println(result + "개의 행이 추가되었습니다."); conn.commit(); }else { System.out.println(result + "개의 행 추가 실패!"); conn.rollback(); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { try { stmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } public void testUpdate(Employee e) { Connection conn = null; Statement stmt = null; int result = 0; try { Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "scott", "tiger"); stmt = conn.createStatement(); String query = "UPDATE emp SET " + "JOB = '" + e.getJob() + "' WHERE empNo = " + e.getEmpNo(); System.out.println(query); result = stmt.executeUpdate(query); System.out.println(result + "개의 행이 수정되었습니다."); query = "UPDATE emp SET " + "SAL = " + e.getSal() + " WHERE empNo = " + e.getEmpNo(); System.out.println(query); result = stmt.executeUpdate(query); System.out.println(result + "개의 행이 수정되었습니다."); query = "UPDATE emp SET " + "COMM = " + e.getComm() + " WHERE empNo = " + e.getEmpNo(); System.out.println(query); result = stmt.executeUpdate(query); System.out.println(result + "개의 행이 수정되었습니다."); conn.commit(); } catch (ClassNotFoundException e1) { e1.printStackTrace(); } catch (SQLException e1) { e1.printStackTrace(); } finally { try { stmt.close(); conn.close(); } catch (SQLException e1) { e1.printStackTrace(); } } } public void testDelete(int empNo) { Connection conn = null; Statement stmt = null; int result = 0; try { Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "scott", "tiger"); stmt = conn.createStatement(); String query = "DELETE FROM emp WHERE empNo = " + empNo; System.out.println(query); result = stmt.executeUpdate(query); if (result > 0) { System.out.println(result + "개의 행이 수정되었습니다."); }else { System.out.println("실패했습니다."); } conn.commit(); } catch (ClassNotFoundException e1) { e1.printStackTrace(); } catch (SQLException e1) { e1.printStackTrace(); } finally { try { stmt.close(); conn.close(); } catch (SQLException e1) { e1.printStackTrace(); } } } }
'JDBC, Servlet, JSP, Ajax, Json, Gson > 01.설치 및 설정, 사용법' 카테고리의 다른 글
[JDBC]01-04.PreparedStatement 사용법 (0) | 2018.11.30 |
---|---|
[JDBC]01-02.이클립스에서 오라클 데이터 불러오는 법 (0) | 2018.11.28 |
[JDBC]01-01.오라클 계정 생성 및 이클립스 세팅 (0) | 2018.11.28 |