Database #Statement #PreparedStatement

곽서현·2022년 11월 6일
0

자바에서 데이터베이스로 쿼리문을 전송할 때, 사용할 수 있는 인터페이스는 2가지가 존재한다.
Statement와 PreparedStatement이다.

둘 다 쿼리 전송 기능을 가지고 있지만
차이점이 존재하므로 어떤 차이점이 나는지, 어떤 인터페이스를 사용하는 것이 더 좋은지 알아보도록 한다.

Statement

1) Statement 객체는 Statement 인터페이스를 구현한 객체를 Connection 클래스의 createStatement() 메소드를 호출함으로써 얻어진다.
2) Statement 객체가 생성되면 executeQuery() 메소드를 호출하여 SQL문을 실행시킬 수 있다.
메소드의 인수로 SQL문을 담은 Srting 객체를 전달한다.

3) Statement는 정적인 쿼리문을 처리할 수 있다.
즉, 쿼리문에 값이 미리 입력되어있어야한다.

PreparedStatement

1) PreparedStatement 객체는 Connection 객체의 preparedStatement()메소드를 사용해서 생성한다. 이 메소드는 인수로 SQL문을 담은 String 객체가 필요하다.
2) SQL문장이 미리 컴파일되고, 실행 시간동안 인수 값을 위한 공간을 확보할 수 있다는 점에서 Statement 객체와 다르다.
3) Statement 객체의 SQL은 실행될 때, 매번 서버에서 분석해야하는 반면 PreparedStatement 객체는 한 번 분석되면 재사용이 용이하다.
4) 각각 인수에 대해 위치홀더(placeholder)를 사용하여 SQL문장을 정의할 수 있게 해준다.
위치 홀더는 ? 로 표현된다.
5) 동일한 SQL문을 특정 값만 바꾸어서 여러번 실행해야 할 때, 인수가 많아서 SQL 문을 정리해야 될 필요가 있을 때 사용하면 유용하다.

🙄 Statement와 PreparedStatement의 가장 큰 차이점은?

캐시 사용 유무

1) statement : SQL문을 실행할 때마다 SQL을 매 번 구문을 새로 작성하고 해석해야하므로 오버헤드가 존재한다.
2) PreparedStatement : 선처리 방식 사용 (준비된 statement)
즉, SQL문을 미리 준비해 놓고 바인딩 변수(? 연산자)를 사용해서 반복되는 비슷한 SQL문을 쉽게 처리

쿼리 실행 순서
1. 쿼리 문장 분석
2. 컴파일
3. 실행

statement : 매번 쿼리를 수행할 때마다 1~3단계를 거친다.
PreparedStatement : 처음 한 번만 3단계를 거친 후 캐시에 담아 재 사용한다.

[출처]
https://velog.io/@dingdoooo/JDBC-Statement-PreparedStatement-%EC%9D%B4%EC%9A%A9%ED%95%98%EA%B8%B0

0개의 댓글