SQLJ 변환 프로그램이 SQLJ 소스 파일을 SQLJ 소스의 정적 SQL에 대한 정보를 요약하는 SQLJ 직렬화 프로파일 및 표준 Java 소스 파일로 변환합니다. 변환 프로그램이 Embedded SQL문을 SQLJ 런타임 라이브러리의 호출로 바꾸어 SQLJ절을 표준 Java 명령문으로 변환합니다. SQLJ 사용자 정의 스크립트가 SQLJ 프로파일을 데이터베이스에 바인드하여 하나 이상의 데이터베이스 패키지를 생성합니다. Java 파일이 컴파일되어 데이터베이스에서 패키지와 함께 실행됩니다. SQLJ 런타임 환경은 순수 Java에서 구현되는 SQLJ 런타임 라이브러리로 구성됩니다. SQLJ 런타임 라이브러리가 목표 데이터베이스(예: DB2®)의 JDBC 드라이버를 호출합니다.
워크벤치의 SQLJ를 사용하여 SQLJ를 지원하는 임의의 데이터베이스(예: DB2 또는 Oracle)와 함께 실행할 응용프로그램을 작성할 수 있습니다. 내장된 사용자 정의 기능은 DB2에서만 작동합니다.
워크벤치에는 다음과 같은 SQLJ 기능이 있습니다.
SQLJ 및 JDBC 모두 관계형 데이터베이스에 액세스하는 기능이 있는 Java 응용프로그램을 제공하지만 다음과 같은 여러 차이점이 있습니다.
일반적으로, 동적 SQL은 SQL문을 미리 작성할 필요가 없으므로 정적 SQL에 비해 사용이 편리합니다. 데이터베이스가 런타임 전에 SQL문을 실행하는데 필요한 작업의 상당 부분을 완료하므로 정적 SQL이 보다 효율적입니다.
예를 들어, 런타임 전까지 컬럼의 수 및 유형을 모르는 경우, 동적 SQL이 테이블을 쿼리 및 갱신 기능을 제공합니다. JDBC의 동적 SQL을 사용하여 Java 프로그램이 런타임 시 SQL문을 작성할 수 있습니다.
런타임 시 동적 SQL을 사용하여 데이터베이스 액세스 및 인증이 판별됩니다. 응용프로그램의 사용자는 모든 필수 데이터베이스 권한이 있어야 하며 데이터베이스가 런타임 시 필수 데이터에 액세스하는 최적의 방법을 판별해야 합니다. 그러나, 정적 SQL을 사용하면 액세스 및 권한이 사용자 정의 및 바인드 시에 판별됩니다. 바인드 프로세스를 수행하는 사용자 권한이 응용프로그램이 수행할 수 있는 사항을 판별합니다. 데이터베이스가 사용자 정의 및 바인드 시 데이터에 액세스하는 최적의 방법을 판별하여 런타임 성능을 개선합니다.
데이터베이스 메타데이터(예: 테이블 및 컬럼 이름)가 런타임 시 변경되지 않으므로 여러 응용프로그램이 동적으로 SQL문을 작성할 필요는 없습니다. 이러한 응용프로그램은 동적 SQL보다 나은 성능을 제공하는 정적 SQL을 사용할 수 있습니다.
정적 SQL의 사용을 통한 더 나은 성능과 더불어 SQLJ에는 JDBC에 비해 다음과 같은 장점이 있습니다.
JDBC는 동적 SQL문 실행과 같이 SQLJ가 수행할 수 없는 사항을 수행할 수 있습니다. 그러나 응용프로그램이 동적 SQL을 사용해야 하는 경우, SQLJ절이 있는 프로그램에 일부 JDBC 코드를 포함할 수 있습니다.
SQLJ절이 Java 코드에 임베드되어 있습니다. 각 절의 앞에 #sql 기호가 있습니다. 다음 SQLJ절은 WHERE절에 Java 변수가 있는 SELECT 문의 예제입니다.
#sql [ctx] cursor1 = {SELECT EMP_ACT.EMPNO FROM EMP_ACT WHERE EMP_ACT.PROJNO = :strProjNo};
DB2 SQLJ 지원은 SQLJ ANSI 표준을 기반으로 합니다. 다음과 같은 종류의 SQL 생성이 SQLJ 프로그램에 표시될 수 있습니다.