prepareStatement
prepareStatement는 dynamic parsing으로 sql문을 parsing한 후 입력된 해당 값을 parsing된 sql문에 binding하여 실행한다.
dynamic parsing은 sql문을 먼저 parsing하여 입력되는 값이 여러개 일 경우 sql문을 여러번 parsing하지 않고 parsing된 sql문에 원하는 값을 binding하여 사용하므로 자원의 낭비가 적다.
prepareStatement사용 시 PreparedStatement를 사용하여 sql문에 필요한 데이터를 입력 받고 실행 시 발생한 데이터를 ResultSet에 저장한다.
장점 : 값의 binding없이 sql문 만을 parsing하므로 parsing된 sql문의 재사용이 용의하여 자원이 낭비으며 인젝션으로 인한 피해를 줄일 수 있다.
단점 : 무겁다.
createStatement
creatStatement는 static parsing으로 sql문을 parsing할 때 입력된해당 값을 sql문에 binding하여 같이 parsing하여 실행한다.
static parsing은 sql문과 입력된 값을 함께 파싱 하므로 한번 parsing된 sql문을 다른 데이터를 입력하여 사용할 수 없어 해당 서비스에 사용자 수가 많은 경우 메모리 full이 발생할 수 있다.
createStatement사용 시 Statement를 사용하여 sql문에 필요한 데이터를 입력 받고 실행 시 발생한 데이터를 ResultSet에 저장한다.
장점 : 가볍다
단점 : parsing된 sql문 사용 시 입력된 값이 다를 경우 재사용할 수 없으며 자원의 낭비가 발생할 수 있다.
인젝션으로 인한 피해가 발생할 수 있다.
정리 :
prepareStatement
:dynamic sql parsing 으로 sql문의 재사용이 용의하나 무겁다는 단점이 있다.
createStatement
:static sql parsingd 으로 한번 파싱된 sql문의 데이터값이 다를 경우 재 사용 할수 없으며,
해당 서비스에 사용자 수가 많을 경우 메모리 full이 발생 할수 있다.
가겹다는 장점이 있다.
공통 : 입력 받고 실행으로 발생한 데이터를 ResultSet로 저장한다.