파일 구조는 다음과 같이 구성하였다.
controller는 기능들이 실행될 class
vo는 여러가지로 표현할 수 있는데 DB에선 엔터티라고 하고 데이터 테이블이 들어올 클래스이다.
dao는 db 데이터를 끌어올 기능을 넣을 class 이다.
자세한 설명은 예제의 주석에서 확인하자.
먼저 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 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)에 JDBCModel 추가
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(); } }
다음으로는 JDBCModel에서 db를 불러오고 사용하는 작업
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(); } } } }
위와 같이 작성하고
Main 클래스를 실행하면 다음과 같이 콘솔에 연결 정보가 출력된다.
'JDBC, Servlet, JSP, Ajax, Json, Gson > 01.설치 및 설정, 사용법' 카테고리의 다른 글
[JDBC]01-04.PreparedStatement 사용법 (0) | 2018.11.30 |
---|---|
[JDBC]01-03.Where 조건과 Insert, Update, Delete 테스트 (0) | 2018.11.28 |
[JDBC]01-01.오라클 계정 생성 및 이클립스 세팅 (0) | 2018.11.28 |