백문이불여일타

Jsp&Servlet:: PrepareStatement란? _실습포함 본문

Java

Jsp&Servlet:: PrepareStatement란? _실습포함

퇴근각 2019. 7. 19. 17:33

앞 절에서 회원 정보를 조회하기 위해 MemberDAO에서 Statement 인터페이스를 이용해서 데이터베이스를

연동했다. (▼아래 참고)

 

Jsp&Servlet:: 서블릿 과 오라클 연동 하는법 _실습포함

오늘은 서블릿에서 데이터베이스와 연동하여 조회한 데이터를 얻은 후 클라이언트의 웹 브라우저로 응답하는 과정을 알아본다. ★TIP 서블릿의 비즈니스 처리 기능을 이해하려면 우선 데이터베이스 접근 명령어인..

java117.tistory.com


Statement의 단점

 

그런데 Statement를 이용해서 데이터베이스와 연동할 경우에는 연동 할때마다 DBMS에서 다시 SQL문을

컴파일해야 하므로 속도가 느리다는 단점이있다.

 

해결방법
  • 이럴 경우 PrepareStatement 인터페이스는 Statement인터페이스를 상속하므로 지금까지 사용한 메서드를 그대로 사용한다.

  • Statement 인터페이스가 DBMS에 전달하는 SQL문 은 단순한 문자열이므로, DBMS는 이는  문자열을 DBMS가 이해할 수 있도록 컴파일하고 실행한다. 반면에 PrepareStatement 인터페이스는 컴파일된 SQL문을 DBMS에 전달하여 성능을 향상시킨다. 

  • PrepareStatement 인터페이스는 실행하려는 SQL문에 ' ? ' 를 넣을수있다. 즉, ' ? ' 값만 바꿔서 쉽게 설정가능하다. Statement 보다 더 SQL문 작성하기가 간단해진다.


1. 이전에 실습하던(위 링크참조)하여 MemberServlet.java 와 MemberVO.java는 기존의 것을 복붙한다

 

 

 

 

 

 

 

 

 

2. PrepareStatement를 이용해서 데이터베이스와 연동하는 MemberDAO클래스를 작성한다.

 

package sec01.ex02;

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class MemberDAO {
	
	private static final String driver = "oracle.jdbc.driver.OracleDriver";
	private static final String url = "jdbc:oracle:thin:@localhost:1521:XE";
	private static final String user = "scott";
	private static final String pwd = "비밀번호 입력란";
	
	private Connection con;
	private PreparedStatement pstmt;

	public List listMembers() {
		List list = new ArrayList();
		try {
			connDB();
			String query = "select * from t_member ";
			System.out.println("prepareStatememt: " + query);
            
            /*preparestatement() 메서드에 sql문을 전달해 preparestatement객체생성한다 */
			pstmt = con.prepareStatement(query);
            /*executeQuery()메서드를 호출해 미리 설정한 sql문을 실행한다 */
			ResultSet rs = pstmt.executeQuery();
            
			while (rs.next()) {
				String id = rs.getString("id");
				String pwd = rs.getString("pwd");
				String name = rs.getString("name");
				String email = rs.getString("email");
				Date joinDate = rs.getDate("joinDate");
				MemberVO vo = new MemberVO();
				vo.setId(id);
				vo.setPwd(pwd);
				vo.setName(name);
				vo.setEmail(email);
				vo.setJoinDate(joinDate);
				list.add(vo);
			}
			rs.close();
			pstmt.close();
			con.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return list;
	}

	private void connDB() {
		try {
			Class.forName(driver);
			System.out.println("Oracle 드라이버 로딩 성공");
			con = DriverManager.getConnection(url, user, pwd);
			System.out.println("Connection 생성 성공");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

3. 실행결과 확인!!

 

 

 

 

 

 

 

 

이전 Statement를 사용했을때와 실행결과는 같다 

하지만 아래내용을 살펴보면 속도는 다르다는걸 알수있다.

 

▼콘솔창 

PrepareStatement를 사용했을때는 서버응답시간 속도 2,080 !

 

 

 

 

 

 

 

 

 

Statement를 사용했을때는 무려 2,372초 가 걸린다 

PrepareStatement가 응답속도가 더 빠르다는걸 알수있다 

 

 

 

 

요약

PrepareStatement 와 Statement의 차이는

데이터베이스와 연동할 경우에 수행 속도가 더 빠르다의 차이가 있다 !!!

'Java' 카테고리의 다른 글

Jsp&Servlet:: JNDI란? , 이클립스 톰캣 DataSource 설정방법  (0) 2019.07.19
Jsp&Servlet::DataSource ,ConnectionPool이란?  (0) 2019.07.19
DTO, VO 차이점  (0) 2019.07.19
DTO,DAO 차이점  (0) 2019.07.19
Comments