*getter setter 만드는 법
*생성자 만드는 법
DriverManager : 메모리에 OracleDriver 로드됨
Connection : 빨대 연결 | 인터페이스 형식. 자손이 구현해라 (오라클 등의 jdbc driver 연결) | (JDBC URL, 계정아이디, 비밀번호)
Statement : 쿼리를 실행할 수 있는 객체
ResultSet : SQL문의 결과값을 받아오는 객체
DAO(Data Access Object) : 데이터 베이스에 접속해서 데이터 추가, 삭제 수정 등의 작업을 하는 클래스
DTO(Data Transfer Object)(VO라고도 불림) : DAO클래스를 이용하여 데이터 베이스에서 데이터를 관리할 때 데이터 베이스를 일반적인 변수에 할당하여 작업 할 수도 있지만, 해당 데이터의 클래스를 만들어 사용함
[계산 EmpVO.java] package edu.global.ex.vo; import java.util.Date; //이름 널? 유형 //------ -------- ------------ //DEPTNO NOT NULL NUMBER(2) //DNAME VARCHAR2(14) //LOC VARCHAR2(13) //이름 널? 유형 //-------- -------- ------------ //EMPNO NOT NULL NUMBER(4) //ENAME VARCHAR2(10) //JOB VARCHAR2(9) //MGR NUMBER(4) //HIREDATE DATE //SAL NUMBER(7,2) //COMM NUMBER(7,2) //DEPTNO NUMBER(2) public class EmpVO { // Database 내에 있는 내용을 객체화 시키는 것 private int empno; private String ename; private String job; private int mgr; private Date hiredate; private int sal; private int comm; private int deptno; public EmpVO(int empno, String ename, String job, int mgr, Date hiredate, int sal, int comm, int deptno) { super(); this.empno = empno; this.ename = ename; this.job = job; this.mgr = mgr; this.hiredate = hiredate; this.sal = sal; this.comm = comm; this.deptno = deptno; } 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; } } -------------------------------------------------------------------------- [계산 EmpDAO.java] package edu.global.ex.dao; import java.sql.*; import java.util.*; import java.util.Date; import edu.global.ex.vo.*; public class EmpDAO { private String url = "jdbc:oracle:thin:@localhost:1521:xe"; private String uid = "scott"; private String upw = "tiger"; public EmpDAO() { try { Class.forName("oracle.jdbc.driver.OracleDriver"); } catch (Exception e) { e.printStackTrace(); } } public List<EmpVO> empSelect() { List<EmpVO> vos = new ArrayList<EmpVO>(); Connection con = null; Statement stmt = null; ResultSet rs = null; try { String sql = "SELECT * FROM emp"; con = DriverManager.getConnection(url, uid, upw); stmt = con.createStatement(); rs = stmt.executeQuery(sql); while (rs.next()) { int empno = rs.getInt("empno"); String ename = rs.getString("ename"); String job = rs.getString("job"); int mgr = rs.getInt("mgr"); Date hiredate = rs.getDate("hiredate"); int sal = rs.getInt("sal"); int comm = rs.getInt("comm"); int deptno = rs.getInt("deptno"); EmpVO vo = new EmpVO(empno, ename, job, mgr, hiredate, sal, comm, deptno); vos.add(vo); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (con != null) con.close(); } catch (Exception e) { e.printStackTrace(); } } return vos; } } -------------------------------------------------------------------------- [계산 emp_dao.jsp] <%@page import="edu.global.ex.vo.*"%> <%@page import="edu.global.ex.dao.*"%> <%@page import="java.util.*"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% EmpDAO dao = new EmpDAO(); List<EmpVO> vos = dao.empSelect(); out.print("<table border='1'>"); out.print("<th>" + "EMPNO" + "</th>"); out.print("<th>" + "ENAME" + "</th>"); out.print("<th>" + "JOB" + "</th>"); out.print("<th>" + "MGR" + "</th>"); out.print("<th>" + "HIREDATE" + "</th>"); out.print("<th>" + "SAL" + "</th>"); out.print("<th>" + "COMM" + "</th>"); out.print("<th>" + "DEPTNO" + "</th>"); for (EmpVO vo : vos) { out.print("<tr>"); out.print("<td>" + vo.getEmpno() + "</td>"); out.print("<td>" + vo.getEname() + "</td>"); out.print("<td>" + vo.getJob() + "</td>"); out.print("<td>" + vo.getMgr() + "</td>"); out.print("<td>" + vo.getHiredate() + "</td>"); out.print("<td>" + vo.getSal() + "</td>"); out.print("<td>" + vo.getComm() + "</td>"); out.print("<td>" + vo.getDeptno() + "</td>"); out.print("</tr>"); } out.print("</table>"); %> </body> </html>
[결과값]
private DataSource dataSource; // =CP 커넥션풀의 객체, 동적으로 바꿈
・커넥션 풀 : 웹 서버에 미리 만들어 놓음
ex) 10개를 만들어 놓으면 10명이 동시 이용 가능.
11번째는 줄 서서 빈 자리가 발생할 때까지 대기.
클라이언트에서 다수의 요청이 발생할 경우 데이터베이스에 부하가 발생한다.
이러한 문제를 해결하기 위해 커넥션 풀(DataBase Connection Pool)기법을 이용한다.
⇒속도는 늦어지지만 서버 다운될 위험을 줄임
[설정하는 법]
- 모든 서버 중단
- Servers - context.xml 파일 접속
- 하기 코드 Ctrl+c , Ctrl+v
<Resource auth="Container" driverClassName="oracle.jdbc.OracleDriver" maxIdle="10" maxTotal="20" <!-- 커넥션 풀의 갯수 --> maxWaitMillis="-1" name="jdbc/oracle" password="tiger" type="javax.sql.DataSource" url="jdbc:oracle:thin:@127.0.0.1:1521:xe" username="scott" />
[계산 EmpDAO.java] package edu.global.ex.dao; import java.sql.*; import java.util.*; import java.util.Date; import javax.naming.*; import javax.sql.DataSource; import edu.global.ex.vo.*; public class EmpDAO { private DataSource dataSource; // =CP 커넥션풀의 객체, 동적으로 바꿈 public EmpDAO() { try { Context context = new InitialContext(); // context.xml의 내용을 끌고오는 객체 dataSource = (DataSource) context.lookup("java:comp/env/jdbc/oracle"); // 바꾸면 안됨! java:comp/env/ : 자바에서 사용하는 문법을 사용하겠다 // 가지고 올 이름을 찾아서 입력 ⇒ jdbc/oracle : context.xml에서 지정한 name을 가져오겠다 } catch (Exception e) { e.printStackTrace(); } } public List<EmpVO> empSelect() { List<EmpVO> vos = new ArrayList<EmpVO>(); Connection con = null; Statement stmt = null; ResultSet rs = null; try { String sql = "SELECT * FROM emp"; // con = DriverManager.getConnection(url, uid, upw); con = dataSource.getConnection(); stmt = con.createStatement(); rs = stmt.executeQuery(sql); while (rs.next()) { int empno = rs.getInt("empno"); String ename = rs.getString("ename"); String job = rs.getString("job"); int mgr = rs.getInt("mgr"); Date hiredate = rs.getDate("hiredate"); int sal = rs.getInt("sal"); int comm = rs.getInt("comm"); int deptno = rs.getInt("deptno"); EmpVO vo = new EmpVO(empno, ename, job, mgr, hiredate, sal, comm, deptno); vos.add(vo); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (con != null) con.close(); } catch (Exception e) { e.printStackTrace(); } } return vos; } }
[결과값]
EL:표현식 또는 액션 태그를 대신해서 값을 표현하는 언어
표현식<%= value%> → EL식 ${ value }
[EL 연산자]
산술 : +, -, *, /, %
관계형 : ==, !=, <, >, <=, >=
조건 : a? b:c(삼항연산식)
논리 : &&, ||
[계산 el_example.jsp] <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <%-- <% out.print("1"); %> --%> <%-- <%=1 %> --%> <!-- 하기 EL은 상기 스크립트릿 <%%>과 동일한 결과가 나옴 --> ${ 1 }<br> ${ 1+1 }<br> ${ 1*3 }<br> ${ 1-9 }<br> ${ 1/8 }<br> ${ 1 > 2 ? 1:2}<br> ${ (1>2) || (1<2) }<br> <hr> ${10}<br> ${99.9}<br> ${"ABC"}<br> ${true}<br> </body> </html>
[결과값]