JDBC의 이스케이프 구문(escape syntax)은 표준 JDBC 메서드와 속성만으로는 접근할 수 없는 데이터베이스 고유 기능을 사용할 수 있도록 유연성을 제공합니다. DBMS마다 문법이 다르더라도 이스케이프 구문을 활용하면 드라이버가 각 데이터베이스에 맞는 형식으로 자동 변환해 주기 때문에 코드의 이식성을 높일 수 있습니다.
기본 이스케이프 구문 형식
JDBC SQL 이스케이프 구문의 일반적인 형식은 다음과 같습니다.
{keyword 'parameters'}이제 JDBC에서 제공하는 주요 이스케이프 구문들을 하나씩 살펴보겠습니다.
d, t, ts 키워드 — 날짜 및 시간 리터럴
d, t, ts 키워드는 각각 날짜(date), 시간(time), 타임스탬프(timestamp) 리터럴을 나타낼 때 사용합니다. DBMS마다 날짜와 시간을 표현하는 방식이 제각각이기 때문에, 이 이스케이프 구문을 사용하면 드라이버가 대상 데이터베이스에 맞는 형식으로 자동으로 변환해 줍니다.
{d 'yyyy-mm-dd'}여기서 yyyy는 연도, mm은 월, dd는 일을 의미합니다. 예를 들어 {d '2009-09-03'}은 2009년 9월 3일을 나타냅니다.
사용 예제
// Statement 객체 생성
stmt = conn.createStatement();
// 데이터 삽입 ==> ID, 이름, 성, 생년월일
String sql = "INSERT INTO STUDENTS VALUES" + "(100,'Zara','Ali', {d '2001-12-16'})";
stmt.executeUpdate(sql);escape 키워드 — LIKE 절의 이스케이프 문자 지정
escape 키워드는 LIKE 절에서 사용할 이스케이프 문자를 지정합니다. SQL 와일드카드인 %(0개 이상의 문자와 일치)를 일반 문자로 검색해야 할 때 특히 유용합니다.
String sql = "SELECT symbol FROM MathSymbols WHERE symbol LIKE '\%' {escape '\'}";
stmt.execute(sql);주의할 점은, 백슬래시(\)를 이스케이프 문자로 사용할 경우 Java 문자열 리터럴 내에서 백슬래시 역시 Java의 이스케이프 문자이므로 두 개의 백슬래시(\\)를 작성해야 한다는 것입니다.
fn 키워드 — 스칼라 함수 호출
fn 키워드는 DBMS에서 제공하는 스칼라 함수(scalar function)를 호출할 때 사용합니다. 예를 들어 SQL 함수 length를 사용해 문자열 길이를 구할 수 있습니다.
{fn length('Hello World')}위 구문은 문자열 'Hello World'의 길이인 11을 반환합니다.
call 키워드 — 저장 프로시저 호출
call 키워드는 저장 프로시저(stored procedure)를 호출할 때 사용합니다. IN 매개변수만 필요한 프로시저는 다음과 같이 호출합니다.
{call my_procedure(?)};IN 매개변수를 받고 OUT 매개변수를 반환하는 프로시저라면 다음 구문을 사용합니다.
{? = call my_procedure(?)};oj 키워드 — 외부 조인(Outer Join) 표현
oj 키워드는 외부 조인(outer join)을 나타낼 때 사용하며, 기본 문법은 다음과 같습니다.
{oj outer-join}여기서 outer-join은 table {LEFT|RIGHT|FULL} OUTER JOIN {table | outer-join} ON search-condition 형태로 작성됩니다.
String sql = "SELECT Employees FROM {oj ThisTable RIGHT OUTER JOIN ThatTable on id = '100'}";
stmt.execute(sql);정리
JDBC 이스케이프 구문을 활용하면 데이터베이스 종류에 상관없이 일관된 코드로 날짜 처리, 스칼라 함수 호출, 저장 프로시저 실행, 외부 조인 등 다양한 기능을 사용할 수 있습니다. 특히 여러 DBMS를 지원해야 하는 애플리케이션을 개발할 때 코드의 이식성과 유지보수성을 크게 향상시킬 수 있는 필수적인 기법입니다.