동적 조회 API: prepareQuery() 및 executePlan() 메소드
이러한 메소드는 동적 조회와 연결된 오보헤드를 효과적으로 할당하는 데 사용됩니다. 이들은 JDBC API의 prepareStatement() 및 executeQuery() 메소드에 대한 함수와 비슷합니다.
동적 EJB(Enterprise JavaBeans) 조회를 수행하기 위해 애플리케이션 서버는 런타임 시 조회 문자열을 SQL(Structured Query Language)로 구문 분석해야 합니다. 물론 동적 조회 대신에 표준 EJB 조회를 선택하여 런타임 오버헤드를 없앨 수 있습니다. 때때로 배치 조회로 참조되는 표준 조회는 배치 시 구문 분석되고 빌드되며 파인더 또는 선택 메소드로 수행됩니다.
다른 옵션은 더 나은 애플리케이션 성능을 위해 동적 조회 오버헤드를 재배포하는 코드를 기록하는 것입니다. executeQuery() 메소드 위치에서 prepareQuery() 메소드를 호출하여 시작합니다. prepareQuery() 메소드는 조회를 구문 분석 또는 변환하고 조회 계획을 호출하는 문자열을 리턴합니다. 계획에는 구문 분석 및 변환이 생성한 SQL문이 포함되어 있고 동적 조회 API에 필요한 다른 정보도 들어 있습니다. 이 문자열을 애플리케이션에 저장하고 조회를 실행하려면 문자열과 함께 executePlan() 메소드를 호출하십시오. (간단하게 SQL 변환 제품만 보려면 prepareQuery() 메소드를 사용할 수 있습니다. 메소드를 호출하고 리턴 값을 표시만 하십시오.)
조회 매개변수를 prepareQuery() 및 executePlan() 메소드 호출의 유형 오브젝트 배열에 전달하십시오. 올바른 데이터 유형을 전달했는지 확인하십시오. 애플리케이션 서버는 prepareQuery() 메소드 호출을 처리할 때 매개변수 유형(실제값이 아닌)에 따라 조회의 유효성을 검사하기 때문입니다.
코드 예
select e.name as name, object(e) as emp from EmpBean e where e.salary < 50000
두 번째
호출은 이 구문과 기능상 동일한 조회를 실행합니다.select e.name as name, object(e) as emp from EmpBean e where e.salary < 60000
예제:
String query =
select e.name as name , object(e) as emp from EmpBean e where e.salary < ?1;
QueryIterator it = null;
Integer[] parms = new Integer[1];
parms[0] = new Integer(0);
prepareQuery()에 대한 호출에서, 정수 값을 전달하십시오. 그러면 다음과 같이 ?1을 정수 유형으로 정의합니다.
String queryPlan= qb.prepareQuery(query, parms, null );
parms[0] = new Integer(50000);
그런 다음, ?1에 대한 Integer(50000) 실제 값으로 조회를 실행합니다.
select e.name as name, object(e) as emp from EmpBean e where e.salary < 50000it =
qb.executePlan( queryPlan, parms, 0, 99);
parms[0] = new Integer(60000);
?1에 대한 다른 Integer(60000) 값으로 조회를 한 번 더 실행하십시오.
it = qb.executePlan( queryPlan, parms, 0, 99);