비트(bit)주세요

createStatement, prepareStatement 차이 본문

CS/웹 프로그래밍(JSP)

createStatement, prepareStatement 차이

yglee730 2021. 5. 28. 21:13
728x90

JAVA에선 JDBC를 이용해 데이터베이스에 접근하고 결과를 출력합니다.

접근하고 결과를 출력하는 과정 중 statement는 SQL쿼리를 이해시키고 실행시키는 역할을 합니다.

 

근데 사용하다 보면 statement가 두가지로 나뉩니다.

 

createStatement
prepareStatement

 

SQL 쿼리를 이해시키고 실행시킨다는 점은 같습니다.

 

차이점은?

createStatement는 실행할 때마다 SQL 쿼리문을 생성합니다.

prepareStatement는 SQL 쿼리문을 미리 생성해놓습니다.

 

 

예를 들어 SQL 쿼리가 String sql = "select * from student"; 이면 결과를 받아올 땐

Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
PrepareStatement stmt =  conn.prepareStatement(sql);
ResultSet rs =   stmt.executeQuery(); 

 

createStatement는 결과를 받아오는 ResultSet을 사용할 때마다 sql 쿼리를 넣습니다.

                                    -> 효율성이 떨어집니다.

 

prepareStatement는 statement를 생성할 때 sql 쿼리를 넣고 ResultSet을 사용할 땐 sql 쿼리를 넣지 않습니다.

                                    -> 효율성이 좋습니다.

 

 

KIM이라는 이름을 가진 학생의 정보를 출력할 때 Statement

String sql = "SELECT * FROM  student WHERE NAME = 'KIM'";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);

 

KIM이라는 이름을 가진 학생의 정보를 출력할 때 PreparedStatement

String sql = "SELECT * FROM  student WHERE NAME = ?";
PreparedStatement stmt =  conn.prepareStatement(sql);
stmt.setString(1, "KIM");
ResultSet rs =   stmt.executeQuery(); 

 - Form 태그에서 값을 전달하여 특정 결과를 출력하고 싶을 때 자주 사용하는 방식입니다. 

 - 여기서 물음표(?)는 바인드변수 입니다.

 - PreparedStatement에서 미리 생성된 sql 쿼리의 바인드변수에 값을 넣을땐

   stmt.set[값 형태]([몇번째 바인드변수], [넣을 값]) 로 넣습니다.

                 ex) stmt.setString(1, "KIM");

                      stmt.setInt(2, 12345678);

 

 

 

'CS > 웹 프로그래밍(JSP)' 카테고리의 다른 글

JDBC  (0) 2021.05.28
내장 객체  (0) 2021.04.22
JSP 액션태그  (0) 2021.04.13
주석  (0) 2021.04.13
JSP 스크립트 요소  (0) 2021.04.13