Consulta suministrada por JDBC Mediator
Un cliente SDO puede proporcionar JDBC Data Mediator Service (DMS) con una sentencia SELECT para sustituir la sentencia que generan los metadatos DMS.
Cuando el cliente SDO crea una instancia de un DMS, el DMS utiliza los metadatos de definición para generar una sentencia SELECT básica. La sustitución de esta consulta le ofrece la posibilidad de especificar marcadores de parámetros; de esta forma, tendrá más control sobre los datos de cliente que llenan un dataGraph. Utilice una serie SQL SELECT estándar para una consulta proporcionada por el cliente.
Con las consultas suministradas y las generadas, se generan automáticamente las sentencias UPDATE, INSERT y DELETE para cada DataObject. Se aplican cuando el Mediator compromete los cambios realizados en el DataGraph de nuevo a la base de datos.
DataObjects de parámetro para consultas suministradas
Los clientes pueden utilizar un parámetro DataObject para suministrar argumentos a consultas SELECT de SQL. Un parámetro DataObject es un DataObject, pero no es parte de ningún DataGraph. Se construye mediante el DMS de JDBC cuando lo solicita el cliente. El ParameterDataObject para consultas suministradas se crea basándose en la consulta proporcionada al Mediator. A todos los parámetros de la consulta se les da un nombre como arg0, arg1, …, argX.
Dado que el parámetro DataObject es un DataObject, puede establecer sus propiedades utilizando el nombre de propiedad o un valor de índice. Puede hacerse referencia a las propiedades por su nombre argX o por el número asociado a ese parámetro 0, 1, … , X. Por ejemplo, la consulta es “SELECT CUSTFIRSTNAME WHERE CUSTSTATE = ? AND CUSTZIP = ?”. Esta consulta suministrada contiene dos parámetros. El primero parámetro corresponde a CUSTSTATE y se puede establecer utilizando la serie “arg0” o el índice 0. El segundo corresponde a CUSTZIP y se puede establecer utilizando la serie “arg1” o el índice 1. A continuación, se proporciona código de ejemplo sobre cómo se establecen. En este código se supone que ya ha establecido los metadatos y el Mediator con los metadatos y la consulta suministrada anteriormente mencionada. Utilizando el método del valor de índice, puede codificarlo así:
DataObject parameters = mediator.getParameterDataObject();
parameter.setString(0, "NY");
parameter.setInt(1, 12345);
DataObject graph = mediator.getGraph(parameters);
Utilizando el método de nombre de propiedad, puede codificarlo así:
DataObject parameters = mediator.getParameterDataObject();
parameters.setString("arg0", "NY");
parameters.setInt("arg1", 12345);
DataObject graph = mediator.getGraph(parameters);
Los resultados son los mismos para los dos casos.
Limitaciones
La consulta SELECT de SQL generada por el DMS de JDBC no es completamente compatible con Oracle o Informix. Esto es porque el Mediator aprovecha la interfaz ResultSetMetaData de JDBC 2.0 y requiere que se implemente completamente. Oracle, Informix, DB2/390 y versiones anteriores admitidas de Sybase no implementan completamente la interfaz ResultSetMetaData. El enfoque SELECT suministrado todavía se puede utilizar con estas bases de datos con una limitación: los nombres de columna de los Metadatos deben ser únicos en todas las tablas. Se produce una excepción InvalidMetadataException si la sentencia SELECT devuelve una columna con un nombre que aparece varias veces en los metadatos. Por ejemplo, si las tablas Customer (Cliente) y Order (Pedido) contienen una columna llamada “ID”, esto no sería válido y provocaría problemas. El modo de corregir esto es cambiar el nombre de las columnas coincidentes de la base de datos para distinguir mejor las dos columnas entre sí. Para la tabla Customer, el nombre de columna podría cambiarse por “CUSTID,” (IDCLI), como en los ejemplos. El nombre de columna Order podría cambiarse por “ORDERID” (IDPEDIDO). Si cambia el nombre de columna Customer, no tendrá que cambiar el nombre de columna Order, pero por coherencia podría ser una buena idea.