Database(2023-03-30)

권단비·2023년 3월 30일
0

IT

목록 보기
111/139

*getter setter 만드는 법

*생성자 만드는 법


DriverManager : 메모리에 OracleDriver 로드됨
Connection : 빨대 연결 | 인터페이스 형식. 자손이 구현해라 (오라클 등의 jdbc driver 연결) | (JDBC URL, 계정아이디, 비밀번호)
Statement : 쿼리를 실행할 수 있는 객체
ResultSet : SQL문의 결과값을 받아오는 객체

[DAO, DTO(VO)]

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>
[결과값]


[커넥션 풀(DBCP)]

private DataSource dataSource; // =CP 커넥션풀의 객체, 동적으로 바꿈

・커넥션 풀 : 웹 서버에 미리 만들어 놓음
  ex) 10개를 만들어 놓으면 10명이 동시 이용 가능.
  	  11번째는 줄 서서 빈 자리가 발생할 때까지 대기.
  
클라이언트에서 다수의 요청이 발생할 경우 데이터베이스에 부하가 발생한다.
이러한 문제를 해결하기 위해 커넥션 풀(DataBase Connection Pool)기법을 이용한다.
⇒속도는 늦어지지만 서버 다운될 위험을 줄임

[설정하는 법]

  1. 모든 서버 중단
  2. Servers - context.xml 파일 접속
  3. 하기 코드 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(Expression Language)]

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>
[결과값]


0개의 댓글