JDBC 중개자 제공 조회
SDO 클라이언트는 SELECT 명령문으로 JDBC DMS(Data Mediator Service)를 제공하여 DMS 메타데이터에서 생성된 명령문을 대체할 수 있습니다.
SDO 클라이언트가 DMS를 인스턴스화하면, DMS는 정의 메타데이터를 사용하여 기본 SELECT 명령문을 생성합니다. 해당 조회를 대체하면 매개변수 마커를 지정하는 기능을 제공합니다. 그러므로 dataGraph를 채우는 클라이언트 데이터를 추가 제어합니다. 클라이언트 제공 조회에 대해 표준 SQL SELECT 문자열을 사용합니다.
제공된 조회와 생성된 조회 모두를 사용하여, UPDATE, INSERT 및 DELETE 명령문은 각 DataObject에 대해 자동으로 생성됩니다. 중개자가 DataGraph에 작성된 변경사항을 다시 데이터베이스에 커미트하면 적용됩니다.
제공된 조회에 대한 매개변수 DataObject
클라이언트는 매개변수 DataObject를 사용하여 인수를 SQL SELECT 조회에 제공합니다. 매개변수 DataObject는 DataObject지만 DataGraph의 일부가 아닙니다. 클라이언트에서 요청하면 JDBC DMS에서 구성됩니다. 제공된 조회에 대한 ParameterDataObject가 중개자에 제공된 조회를 기반으로 작성됩니다. 조회의 모든 매개변수는 arg0, arg1, …, argX와 같은 이름이 주어집니다.
매개변수 DataObject가 DataObject이기 때문에 특성 이름이나 색인 값을 사용하여 해당 특성을 설정할 수 있습니다. 특성은 argX 이름 또는 해당 매개변수, 0, 1, … , X와 연관된 수로 참조될 수 있습니다. 예를 들어, 사용자 조회는 SELECT CUSTFIRSTNAME WHERE CUSTSTATE = ? AND CUSTZIP = ?”입니다. 제공된 조회는 두 매개변수를 포함합니다. 첫 번째 매개변수는 CUSTSTATE에 해당되며 문자열 “arg0” 또는 색인 0을 사용하여 설정될 수 있습니다. 두 번째 매개변수는 CUSTZIP에 해당되며 문자열 “arg1” 또는 색인 1을 사용하여 설정될 수 있습니다. 다음은 설정되는 방식의 샘플 코드입니다. 이 코드는 메타데이터와 위에 제공된 조회로 메타데이터와 중개자를 이미 설정했다고 가정합니다. 색인 값 메소드를 사용하여 다음을 코딩합니다.
DataObject parameters = mediator.getParameterDataObject();
parameter.setString(0, "NY");
parameter.setInt(1, 12345);
DataObject graph = mediator.getGraph(parameters);
특성 이름 메소드를 사용하여 다음과 같이 코딩합니다.
DataObject parameters = mediator.getParameterDataObject();
parameters.setString("arg0", "NY");
parameters.setInt("arg1", 12345);
DataObject graph = mediator.getGraph(parameters);
결과는 두 경우에 대해 동일합니다.
제한사항
JDBC DMS 생성 SQL SELECT 조회는 Oracle 또는 Informix®에서 완전하게 지원되지 않습니다. JDBC 2.0의 ResultSetMetaData 인터페이스를 이용하고 완전하게 구현되어야 하기 때문입니다. Oracle, Informix, DB2/390 및 이전에 지원된 버전의 Sybase는 ResultSetMetaData 인터페이스를 완전히 구현하지 않습니다. 제공된 선택 방법은 하나의 제한사항이 있는 이 데이터베이스로 사용될 수 있습니다. 메타데이터의 열 이름은 모든 테이블에서 고유해야 합니다. 이 선택 명령문은 메타데이터에서 여러 번 표시하는 이름의 열을 리턴하는 경우 InvalidMetadataException이 발생합니다. 예를 들어, 고객 및 주문 테이블 모두는 “ID”라는 열을 포함하면 유효하지 않아 문제가 발생할 수 있습니다. 이를 수정하는 방법은 데이터베이스에서 일치하는 열 중 최소 하나의 이름을 변경하여 서로 두 열을 잘 구분하는 것입니다. 고객 테이블의 경우, 열 이름은 예제에서와 같이 “CUSTID”로 변경될 수 있습니다. 주문 열 이름은 “ORDERID”로 변경될 수 있습니다. 고객 열 이름을 변경하면, 주문 열 이름을 변경하지 않아도 되지만 일관성을 위해서는 좋을 수 있습니다.