일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- ConnectionPool이란?
- 쿠키생성위치
- web.xml에 load-on-startup 설정
- ServletConfig란
- 스크립트 요소 예제
- 오라클 데이터베이스 접속
- 서블릿에서 초기화하는방법
- import 오류
- DataSource이란?
- 쿠키 종류
- Statement 단점
- 이클립스 톰캣 DataSource사용방법
- Session쿠키
- 세션트래킹 이란
- DataSource 설정
- 쿠키API
- 쿠키실행과정
- JRE라이브러리 깨짐
- 자바 웹을 다루는 기술
- Tomcat DataSource 설정
- 서블릿과 오라클 연동
- Project facet java version 10 is not supported
- PrepareStatement란?
- ServletContext 메서드
- Persistence 쿠키
- JNDI란
- 애너테이션으로 서블릿에서 초기화
- Configure build path
- ClassPath 경로
- load-on-startup
- Today
- Total
백문이불여일타
Jsp&Servlet:: PrepareStatement란? _실습포함 본문
앞 절에서 회원 정보를 조회하기 위해 MemberDAO에서 Statement 인터페이스를 이용해서 데이터베이스를
연동했다. (▼아래 참고)
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 |