본문으로 바로가기

-DAO : DATA access object(DB로 접근해서 로직을 수행)

          일반적인 jsp 혹은 servet페이지내에 위의 로직을 함께 기술할 수도 있지만 , 데이터 추가, 삭제, 수정 등의 작업을 하는 메소드

          유지보수 및 코드의 모듈화를 위해 별도의  DAO클래스를 만들어 사용한다.



-DTO : Data Transfer Object(데이터를 객체데이터로 변환) 데이터를 관리하는 클래스

        데이터를 관리할때 데이터를 일반적인 변수에 할당하여 작업할 수 있지만, 해당 데이터의 클래스를 별로로 만들어 사용(setter,getter)



                                                             DAO

웹브라우저------------서버( servlet,jsp)----요청------DB받은 객체를 DTO에저장한다.




memberselect.jsp


<%@page import="com.javalec.daotoex.MemberDTO"%>

<%@page import="java.util.ArrayList"%>// 어레이리스트 임포트

<%@page import="com.javalec.daotoex.MemberDAO"%>

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

</head>

<body>


<%

MemberDAO memberDAO = new MemberDAO(); //1.DAO객체 생성

ArrayList<MemberDTO> dtos = memberDAO.memberSelect();// memberDAO 클래스의 memberSelect()라는 메소드를 실행할때  2. ArrayList <MemberDTO> 어레이리스트 dtos생성

for(int i=0; i<dtos.size(); i++) {

MemberDTO dto = dtos.get(i);//dtos의 사이즈 만큼 객체를 가져와 dto에 저장.

String name = dto.getName();// name의 값을 불러옴.

String id = dto.getId(); //id

String pw = dto.getPw(); //pw

String phone = dto.getPhone1() + " - "+ dto.getPhone2() + " - " + dto.getPhone3(); //phone

String gender = dto.getGender(); //gender

out.println("이름 : " + name + ", 아이디 : " + id + ", 비밀번호 : " + pw + ", 연락처 : " + phone + ",  성별 : " + gender + "<br />" );

}

%>


</body>

</html>


MemberDAO.java


memberpackage com.javalec.daotoex;


import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

import java.util.ArrayList;


public class MemberDAO {


private String url = "jdbc:oracle:thin:@localhost:1521:oracle";

private String uid = "scott";

private String upw = "tiger";

1.public MemberDAO() {  //DAO 생성자, 드라이버 로드

try {

Class.forName("oracle.jdbc.driver.OracleDriver");

} catch (Exception e) {

e.printStackTrace();

}

}

2.public ArrayList<MemberDTO> memberSelect() {  memberSelect실행할때 ArrayList로 반환

ArrayList<MemberDTO> dtos = new ArrayList<MemberDTO>();// 1. 어레이리스트 객체 생성

Connection con =null;

Statement stmt = null;

ResultSet rs = null;

try {

con = DriverManager.getConnection(url, uid, upw);// DB연결

stmt = con.createStatement();  db실행

rs = stmt.executeQuery("select * from member"); //쿼리문결과

while (rs.next()) {// DB에서 data를 하나씩 값을 가져온다.

String name = rs.getString("name");

String id = rs.getString("id");

String pw = rs.getString("pw");

String phone1 = rs.getString("phone1");

String phone2 = rs.getString("phone2");

String phone3 = rs.getString("phone3");

String gender = rs.getString("gender");

MemberDTO dto = new MemberDTO(name, id, pw, phone1, phone2, phone3, gender);//2.DTO 객체 dto생성

dtos.add(dto); //3.demberDTO dtos라는 어레이리스트에 dto객체를 추가하여  저장

}

} 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 dtos;

}

}


memberDTO.java


package com.javalec.daotoex;


public class MemberDTO {


private String name;

private String id;

private String pw;

private String phone1;

private String phone2;

private String phone3;

private String gender;

public MemberDTO(String name, String id, String pw, String phone1, String phone2, String phone3, String gender) {

this.name = name;

this.id = id;

this.pw = pw;

this.phone1 = phone1;

this.phone2 = phone2;

this.phone3 = phone3;

this.gender = gender;

}


public String getName() {

return name;

}


public void setName(String name) {

this.name = name;

}


public String getId() {

return id;

}


public void setId(String id) {

this.id = id;

}


public String getPw() {

return pw;

}


public void setPw(String pw) {

this.pw = pw;

}


public String getPhone1() {

return phone1;

}


public void setPhone1(String phone1) {

this.phone1 = phone1;

}


public String getPhone2() {

return phone2;

}


public void setPhone2(String phone2) {

this.phone2 = phone2;

}


public String getPhone3() {

return phone3;

}


public void setPhone3(String phone3) {

this.phone3 = phone3;

}


public String getGender() {

return gender;

}


public void setGender(String gender) {

this.gender = gender;

}

}


preparedstatement객체 살펴보기


Statement객체의 경우 중복코드가 많아지는 단점이 있습니다. 이러한 단점을 보완한 PreparedStatement객체이다.


Class.forName(driver)

connection = DriverManager.getConnection(url,uid,upw);

int n;

String query = "insert into memberforpre (id, pw, name, phone) values (?, ?, ?, ?)";// 쿼리문을 일단 작성


preparedStatement.setString(1,"abc");

preparedStatement.setString(2,"123");

preparedStatement.setString(3,"홍길동");

n=preparedStatement.excuteUpdate();


커넥션 풀


클라이언트엣허 다수의 요청이 발생한 경우 데이터베이스에 부하가 발생하게 된다.

이러한 문제를 해결하기 위해서 커넥션 풀( DataVast connection Pool())기법을 이용한다.

미리미리 짜장면을 만들어서 손님에게 주는것이라고 보면된다.

톰캣서버안에서 pool을 미리만들어놓고 통신하는것이다.


웹브라우저   ----서버(DBCP)-----Database

웹브라우저

웹브라우저

웹브라우저



톰캣 컨테이너안에 있는 xml파일을 수정


maxActive = 50개의 객체를 만든다

maxWait = 50개만들고 약 1000초의 시간이 걸린다.


다 저장한다음 동기화를 시킨다.


private DataSource dataSource; // DataSource 라는 객체를 만든다.

public MemberDAO(){//생성자부분 수정


try{


     context context = new initialContext(); 컨텍스트(모든 정보를 가지는 데이터 구조) 초기화

    dataSource = (DataSouce)context.lookup("java:comp/env/jdbc/Oracle11g"); 컨텍스트로부터 lookup

catch( Exception e)

{

  e.printStackTrace();

}



public ArrayList<MemberDTO> memberSelect() {

ArrayList<MemberDTO> dtos = new ArrayList<MemberDTO>();

Connection con =null;

Statement stmt = null;

ResultSet rs = null;

try {


con = dataSource.getConnection();

}




'프로그래밍 > jsp' 카테고리의 다른 글

파일업로드  (484) 2017.12.18
19.데이터베이스-3 (회원가입 및 회원정보 프로그래밍)  (468) 2017.12.09
데이터베이스-2  (1211) 2017.10.27
데이터베이스 -1  (1199) 2017.10.26
16.자바 빈  (1200) 2017.10.24