데이터베이스 관리 시스템(DBMS)에서 동일하거나 비슷한 데이터베이스 문을 높은 효율성으로 반복적으로 실행하기 위해 사용되는 기능이다.
일반적으로 쿼리나 업데이트와 같은 SQL 문과 함께 사용되는 prepared statement는 템플릿의 형태를 취하며 그 템플릿 안으로 특정한 상수값이 매 실행 때마다 대체된다.
먼저 애플리케이션은 문의 틀을 만들고 이를 DBMS로 보낸다. 특정값은 지정하지 않은 채로 남겨지며 이들은 "변수", "플레이스홀더", "바인드 값"으로 부른다.
INSERT INTO products (name, price) VALUES (?, ?);
나중에 애플리케이션이 문 틀의 변수에 값(바인드)를 지정하면 DBMS는 (결과를 반환할 수도 있는) 문을 실행한다. 애플리케이션은 여러 값으로 원하는 횟수만큼 문을 실행할 수 있다.
jdbcTemplate.update("" +
"INSERT INTO account(" +
" id, amount, user_Id, encoded_Password, user_Name)" +
" VALUES(2, 500000, ?, ?, ?)",
"a111", passwordEncoder.encode("Aa1!!!!!"), "내이름"
);
Prepared Statement의 ? 플레이스홀더에 각각 "a111", passwordEncoder.encode("Aa1!!!!!"), "내이름" 값이 순서대로 바인딩된다. 이 값들은 변수로 전달되는 동적인 데이터다.