좌선
좌선의 개발일지
좌선
전체 방문자
오늘
어제
  • 분류 전체보기 (79)
    • 개발환경 (3)
    • 알고리즘 (10)
      • 코딩테스트 (9)
      • 알고리즘 (1)
    • Java (54)
      • JPA (6)
      • Spring (5)
      • SpringBoot (15)
    • Network (2)
    • Database (1)
    • Git (2)
    • & (1)
    • Exception (3)
    • Study (0)
      • RealMySQL (0)
    • 회고 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 스프링 부트와 AWS로 혼자 구현하는 웹 서비스
  • Spring Data JPA
  • 자바 웹을 다루는 기술
  • 코드로배우는스프링웹프로젝트
  • AWS
  • TDD 실천법과 도구
  • 자바웹을다루는기술
  • 머스테치
  • 쿼리로그
  • dirtychecking
  • SpringBoot
  • 테스트주도개발
  • 스프링부트
  • 스프링부트와 AWS로 혼자 구현하는 웹 서비스
  • 프로그래머스
  • 다트게임
  • 더티체킹
  • programmers
  • Spring
  • Mustache

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
좌선

좌선의 개발일지

Java

Servlet 비즈니스 로직 처리2 (PreparedStatement)

2021. 4. 4. 15:43

PreparedStatement를 이용한 회원 정보 실습

Servlet 비즈니스 로직 처리1 에서는

- steel-blue.tistory.com/28

 

Servlet 비즈니스 로직 처리1 (Servlet, DAO, VO)

서블릿의 데이터베이스 연동하기 - 서블릿에서 데이터베이스와 연동하여 조회한 데이터를 얻은 후 클라이언트의 웹 브라우저로 응답하는 과정 실습 - 클라이언트로부터 요청을 받으면, 서블릿

steel-blue.tistory.com

MemberDAO에서 Statement 인터페이스를 이용하여 데이터 베이스와 연동했음.

하지만 Statement를 이용해서 데이터베이스와 연동할 경우,

연동할 때마다 DBMS에서 다시 SQL문을 컴파일해야 하므로 속도가 느리다.

 

이럴 경우 PreparedStatement 인터페이스를 사용하면

SQL문을 미리 컴파일해서 재사용하므로

Statement 인터페이스보다 훨씬 빠르게 데이터베이스 작업을 수행할 수 있다.

따라서 데이터베이스와 연동할 때, 빠른 처리가 필요할 때는

'PreparedStatement' 인터페이스를 사용해야 한다.

 

PreparedStatement 인터페이스의 특징

- PreparedStatement 인터페이스는 Statement 인터페이스를 상속하므로 지금까지 사용한 메서드를 그대로 사용

- Statement 인터페이스 : DBMS에 전달하는 SQL문 - 단순한 문자열. DBMS가 문자열을 컴파일하고 실행

  PreparedStatement 인터페이스 : 컴파일된 SQL문을 DBMS에 전달 - 성능 향상

- PreparedStatement 인터페이스에서는 실행하려는 SQL문에 "?"을 넣어 "?"의 값만 바꾸어 손쉽게 SQL문 설정 가능

 

public class MemberDAO {
	private PreparedStatement pstmt;
	private Connection con;
	
	public List<MemberVO> listMembers(){
		List<MemberVO> list = new ArrayList<MemberVO>();
		try {
			//connDB(); // 네가지 정보로 데이터베이스를 연결합니다.
			con = SingletonHelper.getConnection("oracle");
			String query = "select * from t_member";
			System.out.println(query);
			pstmt = con.prepareStatement(query);
			ResultSet rs = pstmt.executeQuery(); //SQL문으로 회원정보를 조회합니다.
			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 객체의 속성에 설정합니다.
				MemberVO vo = new MemberVO();
				vo.setId(id);
				vo.setPwd(pwd);
				vo.setName(name);
				vo.setEmail(email);
				vo.setJoinDate(joinDate);
				//설정된 MemberVO 객체를 다시 ArrayList에 저장합니다.
				list.add(vo);
			}
			rs.close();
			stmt.close();
			con.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		//조회한 레코드의 개수만큼 MemberVO 객체를 저장한 ArrayList를 반환합니다.
		return list;
	}

	private void connDB() {
		try {
			Class.forName("oracle.jdbc.OracleDriver");
			System.out.println("Oracle 드라이버 로딩 성공");
			con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","bituser","1004");
			System.out.println("Connection 생성 성공");
			stmt = con.createStatement();
			System.out.println("Statement 생성 성공");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

connDB() 메서드는 쓰지 않고 SingletonHelper 클래스를 따로 만들어 데이터연결함.

steel-blue.tistory.com/22

 

JDBC SingletonHelper

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; public class SingletonHelper { /* * if(dsn.equals(..

steel-blue.tistory.com

 

 

Statement() 

Statement stmt;

stmt = con.createStatement();

ResultSet rs = stmt.executeQuery(query);

=> query 단순한 문자열

DBMS가 이 문자열을 컴파일하고 실행한다.

 

PreparedStatement()

PreparedStatement pstmt;

pstmt = con.preparedStatement(query);

ResultSet rs = pstmt.executeQuery();

=> 컴파일된 SQL문을 DBMS에 전달

 

 

    'Java' 카테고리의 다른 글
    • Servlet 비즈니스 로직 처리1 (Servlet, DAO, VO)
    • Servlet 웹 브라우저에서 서블릿으로 데이터 전송하기
    • Servlet 애너테이션을 이용한 서블릿 매핑
    • Servlet
    좌선
    좌선
    얼렁뚱땅 천방지축 굴러가는 개발자의 삶

    티스토리툴바