PreparedStatement

Sonar0·2022년 12월 3일

PreparedStatement

Statement interface를 상속받고 있기 때문에 Statement의 모든 메소드를 가지고 있다.
parameterized query를 사용할 때 쓴다. (쿼리의 내용은 같으나 변수를 바꿔가며 사용하고 싶을 때)

장점

컴파일 한번으로 여러 종류의 쿼리를 사용할 수 있다.

사용법

ex) "insert into table value(?, ?)" 와 같이 쿼리를 작성하고 ?표 부분에 들어갈 파라미터를 PreparedStatement의 함수를 이용해 세팅할 수 있다.

Statement의 주요 메소드

참고

ResultSet executeQuery (String sql)

  • SQL을 수행하고 ResultSet을 받아온다. 결과를 받아오므로 SELECT문을 쓸 때 사용.

int executeUpdate (String sql)

  • 결과를 받아오지 않는 쿼리(INSERT, UPDATE, DELETE, DDL ...)를 쓸 때 사용.
  • return값은 변경사항이 적용된 row의 수이다.

boolean execute (String sql)

  • 여러개의 결과를 얻는 SQL을 수행한다.
  • 첫 번째 결과가 ResultSet이면 true를 return한다.
    - true일 경우 getResult ()를 사용해서 결과를 얻는다.
  • 첫 번째 결과가 ResultSet이 아니거나 Update count인 경우 false를 return한다.
    - false일 경우 getUpdateCount ()를 사용해서 결과를 얻는다.

void addBatch (String sql)

  • 현재 Statement 객체에 배치로 실행할 SQL 명령어를 추가한다.

int[] executeBatch ()

  • addBatch (String sql) 로 쌓인 SQL을 배치로 수행한다. 모든 커맨드가 성공하면 update된 count를 배열로 return한다.

PreparedStatement의 주요 메소드

public void setInt(int paramIndex, int value)

  • paramIndex 자리에 있는 파라미터를 value (int)값으로 세팅한다.

public void setString(int paramIndex, String value)

  • paramIndex 자리에 있는 파라미터를 value (String)값으로 세팅한다.

public void setFloat(int paramIndex, float value)

  • paramIndex 자리에 있는 파라미터를 value (float)값으로 세팅한다.

public void setDouble(int paramIndex, double value)

  • paramIndex 자리에 있는 파라미터를 value (double)값으로 세팅한다.

원본 테이블

코드

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class Main {
    public static void main(String[] args) throws SQLException {
        Connection con = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/jdbc", "root", "1234");
        PreparedStatement psUpdate = con.prepareStatement("update product set `price` = `price` + ? where id = ?;");
        // price에다가 ?를 더해줄 것 , id가 ? 인 레코드를 변경할 것
        psUpdate.setInt(1, 10000);
        // 첫번째 ?의 값을 10000으로 set
        psUpdate.setInt(2, 1);
        // 두번째 ?의 값을 1로 set
        int updateResult = psUpdate.executeUpdate();
        // 쿼리를 사용
        System.out.println("result of update: " + updateResult);
    }
}

변경 테이블

id = 1 인 레코드의 price에 10000이 더해진 것을 확인할 수 있다.

profile
초보 개발자

0개의 댓글