반응형
정적 쿼리와 동적 쿼리는 저도 이번에 공부하면서 처음 알게된 것인데 (;;)
사실 닷넷 프레임워크 공부할 때 계속 동적 쿼리를 사용한 것 같군요.
하지만 이게 동적 쿼리인지는 몰랐답니다. 컥 ;;
정적 쿼리 방식 : 변수가 바뀔 때마다 새로운 SQL 을 생성 하여 DB쿼리 수행
동적 쿼리 방식 : 변수가 바뀔 때마다 파싱을 하지 않고 변수 바인딩 과정을 통해 DB 쿼리 수행
insert into person values (null, '홍길동', '888888-1111111', '2002-02-02');
이것이 정적 쿼리입니다.
insert into person values (null, ?, ?, ?);
쿼리문을 이런 식으로 해놓고 ? 부분을 변수 바인딩을 통해 입력받는 것을 동적 쿼리라고 합니다.
정적 쿼리와 동적 쿼리는 각각 장단점이 있습니다.
동적 쿼리문을 사용한 간단한 예제를 보겠습니다.
- import java.sql.*;
- import java.util.*;
- public class Exam_04
- {
- public static void main(String[] ar)
- {
- try
- {
- Class.forName("com.mysql.jdbc.Driver");
- }
- catch( ClassNotFoundException e ) {}
- Connection conn = null;
- Statement stmt = null;
- PreparedStatement pstmt = null;
- ResultSet rs = null;
- String name = "fff";
- String jumin = "555555-5555555";
- String birth = "2003-06-15";
- String query = "insert into person values (null, ?, ?, now())";
- try
- {
- conn = DriverManager.getConnection("jdbc:mysql://localhost/java", "root", "abc123");
- //stmt = conn.createStatement();
- //stmt.executeUpdate(query);
- //stmt.close();
- pstmt = conn.prepareStatement(query);
- pstmt.setString(1, name);
- pstmt.setString(2, jumin);
- pstmt.executeUpdate();
- conn.close();
- System.out.println("업데이트 성공");
- }
- catch( SQLException e )
- {
- System.err.println("error = " + e);
- }
- }
- }