'Statement PreparedStatement 차이'에 해당되는 글 1건

반응형

이번에는 Statement가 아닌 PreparedStatement를 활용하여 

데이터를 핸들링하는 예제를 작성해보자.


JdbcConnector.java

package com.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import com.bean.UserBean;


public class JdbcConnector {
	
	public static Connection getConnection() throws ClassNotFoundException, SQLException{
		
		//DB 종료에 따른 JDBC DRIVER 클래스
		Class.forName("com.mysql.jdbc.Driver");
		
		//DB접속 url
		String url = "jdbc:mysql://localhost/test";
		//DB접속 ID
		String id = "root";
		//DB접속 패스워드
		String pw = "1234";
		
		//접속정보로 JDBC 연결 커넥션 생성
		Connection conn = DriverManager.getConnection(url,id,pw);
		
		return conn;
	}
	public static void main(String args[]) throws ClassNotFoundException, SQLException {
		//커넥션생성
		Connection conn = getConnection();
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		UserBean user = new UserBean();
		user.setId("pby0716");
		user.setName("박병영");
		user.setEmail("pby0716@naver.com");
		
		String sql1 = "INSERT INTO MEMBER(ID,NAME,EMAIL) VALUES (?,?,?)";
		
		//PreaparedStatement 생성 후 실행할 쿼리정보 등록
		pstmt = conn.prepareStatement(sql1);
		
		//?에 대한 하는 가변부분 셋팅
		pstmt.setString(1, user.getId());
		pstmt.setString(2, user.getName());
		pstmt.setString(3, user.getEmail());
		
		int count = pstmt.executeUpdate();
		if(count > 0) {
			System.out.println("Insert 성공");
		}else {
			System.out.println("Insert 실패");
		}
		
		/*Insert 한 데이터를 조회하는 예제*/
		
		//받아올 id를 담으면 된다. 지금은 예제로써 임의로 담아두었다.
		String id = "pby0716";
		
		//실행 쿼리
		String sql2 = "SELECT ID, NAME, EMAIL FROM MEMBER WHERE ID = ?";
		//PreaparedStatement 생성 후 실행할 쿼리정보 등록
		pstmt = conn.prepareStatement(sql2);
		//위 sql에 담겨있는 쿼리에 가변하는 변수(id)를 세팅하는 부분
		pstmt.setString(1, id);
		
		//결과를 담을 ResultSet 생성 후 결과 담기
		rs = pstmt.executeQuery();
		
		//결과를 담을 ArrayList생성
		ArrayList<UserBean> list = new ArrayList<UserBean>();
		
		//ResultSet에 담긴 결과를 ArrayList에 담기
		while(rs.next()) {
			UserBean bean = new UserBean();
			bean.setId(rs.getString("ID"));
			bean.setName(rs.getString("NAME"));
			bean.setEmail(rs.getString("EMAIL"));
			list.add(bean);
		}
		//결과물 출력
		for(int i=0; i<list.size(); i++) {
			System.out.println("회원아이디:"+list.get(i).getId());
			System.out.println("회원이름:"+list.get(i).getName());
			System.out.println("회원이메일:"+list.get(i).getEmail());
		}
	}
}

이전에 사용했던 Statement와 PreparedStatement의 차이가 무엇일까?


Statement의 경우에는 완성형 쿼리를 담아서 실행을 하게되지만,

PreparedStatement의 경우에는 가변처리되어야하는 부분에 대해서 ?로 처리하여 쿼리를 바인딩한 후에도 핸들링하여 사용할 수 있다.


완전한 쿼리가 실행될때는 Statement객체를 사용하는 것이 속도측면에서 빠르며,

불완전한 쿼리를 가변처리를 하며 반복적으로 사용할 경우에는 PreparedStatement객체를

사용하는 것이 빠르다.


예제소스에서도 보듯이 Statement의 경우에는 실행하기직전에 쿼리를 담아서 컴파일처리를 하며, PreparedStatement의 경우에는 객체 생성시에 쿼리를 미리 담아서 ?에 대한부분을 미리 처리한 후 컴파일해놓고 처리를 한다.


때에 따라서 해당 두가지를 적절히 사용하면, DB속도 및 소프트웨어 속도 면에서 향상된 프로그램을 개발할 수 있다.!


반응형

'IT관련 > JAVA' 카테고리의 다른 글

JAVA에서 JDBC로 SELECT 조회하는 방법(Statement)  (0) 2018.03.16
블로그 이미지

Mr.비타민

,