Utilización del Data Mediator Service de Java Database Connectivity para acceso a datos

En los pasos siguientes se muestra cómo crear los metadatos para un DMS (Data Mediator Service) de JDBC (Java™ Database Connectivity) y también cómo crear una instancia del gráfico de datos DMS.

Procedimiento

  1. Cree la fábrica de metadatos. Se puede utilizar para crear metadatos, tablas, columnas, filtros, argumentos de filtro, restricciones de base de datos, claves, objetos order-by y relaciones.
    MetadataFactory factory = MetadataFactory.eINSTANCE;
    Metadata metadata = factory.createMetadata();
  2. Cree la tabla para los metadatos. Puede hacerlo de dos formas. Los metadatos pueden crear la tabla y, a continuación, la tabla puede autoañadirse a los metadatos ya creados o los metadatos pueden añadir una tabla nueva, en cuyo caso se crea una nueva tabla. Puesto que implica menos pasos, en este ejemplo se utiliza la segunda opción para crear una tabla denominada CUSTOMER.
    Table custTable = metadata.addTable("CUSTOMER");
  3. Establezca la tabla raíz para los metadatos. De nuevo, puede hacerlo de dos maneras. La tabla se puede declarar a sí misma como raíz o se pueden los metadatos pueden establecer su propia tabla raíz. Para la primera opción, codifique:
    custTable.beRoot();
    Si desea utilizar la segunda opción, codifique:
    metadata.setRootTable(custTable)
  4. Configure las columnas de la tabla. La tabla de ejemplo se denomina CUSTOMER. Cada columna se crea con su tipo. Los tipos de columna de los metadatos sólo pueden ser de los tipos a los que dé soporte el controlador de JDBC que se utilice. Si tiene dudas sobre los tipos a los que da soporte el controlador de JDBC que se está utilizando, consulte la documentación del controlador de JDBC.
    Column custID = custTable.addIntegerColumn("CUSTID");
    custID.setNullable(false);
    En este ejemplo se crea un objeto de columna para esta columna, pero no para las restantes. El motivo es que esta columna es la clave primaria y se utiliza para establecer la clave primaria de la tabla después de que se añada el resto de columnas. Una clave primaria no puede ser nula; por lo tanto custID.setNullable(false) impide que esto suceda. Añada el resto de columnas:
    custTable.addStringColumn("CUSTFIRSTNAME");
    custTable.addStringColumn("CUSTLASTNAME");
    custTable.addStringColumn("CUSTSTREETADDRESS");
    custTable.addStringColumn("CUSTCITY");
    custTable.addStringColumn("CUSTSTATE");
    custTable.addStringColumn("CUSTZIPCODE");
    custTable.addIntegerColumn("CUSTAREACODE");
    custTable.addStringColumn("CUSTPHONENUMBER");
    
    custTable.setPrimaryKey(custID);
  5. Cree otras tablas, según sea necesario. Para este ejemplo, cree la tabla Orders. Cada pedido (order) lo realiza un cliente (customer).
    Table orderTable = metadata.addTable("ORDER");
    
    Column orderNumber = orderTable.addIntegerColumn("ORDERNUMBER");
    orderNumber.setNullable(false);
    
    orderTable.addDateColumn("ORDERDATE");
    orderTable.addDateColumn("SHIPDATE");
    Column custFKColumn = orderTable.addIntegerColumn("CUSTOMERID");
    
    orderTable.setPrimaryKey(orderNumber);
  6. Cree las claves foráneas de las tablas que necesitan relaciones. En este ejemplo, los pedidos tiene una clave foránea que apunta al cliente que ha cursado el pedido. Para crear una relación entre las dos tablas, debe crear primero una clave foránea para la tabla Orders.
    Key custFK = factory.createKey();
    custFK.getColumns().add(custFKColumn);
    
    orderTable.getForeignKeys().add(custFK);
    La relación adopta dos claves, la clave padre y la clave hijo. Puesto que no se da ningún nombre específico, la concatenación predeterminada de CUSTOMER_ORDER es el nombre que se utiliza para esta relación.
    metadata.addRelationship(custTable.getPrimaryKey(), custFK);
    La relación predeterminada incluye todos los clientes que tienen pedidos. Para obtener todos los clientes, aunque no tengan pedidos, necesitará también está línea:
    metadata.getRelationship("CUSTOMER_ORDER") 
                                  .setExclusive(false); 
    Ahora que las dos tablas están relacionadas entre sí, puede añadir un filtro a la tabla Customer para buscar cliente con características específicas.
  7. Especifique los filtros que necesite. En este ejemplo, se establecen filtros para la tabla Customer para buscar todos los clientes que tengan un estado concreto, con un apellido concreto y que hayan cursado pedidos.
    Filter filter = factory.createFilter();
    filter.setPredicate("CUSTOMER.CUSTSTATE = ? AND CUSTOMER.CUSTLASTNAME = ?");
    
    FilterArgument arg1 = factory.createFilterArgument();
    arg1.setName("CUSTSTATE");
    arg1.setType(Column.STRING);
    filter.getFilterArguments().add(arg1);
    
    FilterArgument arg2 = factory.createFilterArgument();
    arg2.setName("CUSTLASTNAME");
    arg2.setType(Column.STRING);
    filter.getFilterArguments().add(arg2);
    
    custTable.setFilter(filter);
  8. Añada los objetos order by que necesite. En este ejemplo, se establece el objeto order by para que orden por el nombre del cliente.
    Column firstName = ((TableImpl)custTable).getColumn("CUSTFIRSTNAME");
    OrderBy orderBy = factory.createOrderBy();
    orderBy.setColumn(firstName);
    orderBy.setAscending(true);
    metadata.getOrderBys().add(orderBy);
    Con esto se completa la creación de los metadatos para este DMS de JDBC.
  9. Cree una conexión a la base de datos. En este ejemplo no se muestra cómo crear la conexión con la bases de datos. Se presupone que el cliente SDO llama al método connect() que lo lleva a cabo. Consulte el tema
  10. Crear la instancia e inicializar el objeto DMS de JDBC (dataGraph). El cliente SDO efectúa estas acciones. Para este ejemplo:
    ConnectionWrapperFactory factory = ConnectionWrapperFactory.soleInstance;
    connectionWrapper = factory.createConnectionWrapper(connect());
    JDBCMediatorFactory mFactory = JDBCMediatorFactory.soleInstance;
    JDBCMediator mediator = mFactory.createMediator(metadata, connectionWrapper);
    DataObject parameters = mediator.getParameterDataObject();
    parameters.setString("CUSTSTATE", "NY");
    parameters.setString('CUSTLASTNAME', 'Smith');
    DataObject graph = mediator.getGraph(parameters);
    Ahora que ya tiene dataGraph, puede manipular la información. El ejemplo siguiente contiene la manipulación básica de datos en un objeto DataGraph.
    Ejemplo: manipulación de datos en un objeto de gráficos de datos

    Utilizando el gráfico de datos simple que se creó durante la tarea Uso del servicio mediador de datos de Java Database Connectivity para el acceso a datos, se detalla a continuación una manipulación de datos típica.

    Primero obtenga la lista de clientes, luego para cada cliente obtenga todos los pedidos e imprima el nombre del cliente y la fecha del pedido. (Para este ejemplo, se asume que ya sabe que el apellido es Smith).
    List customersList = graph.getList("CUSTOMER");
    Iterator i = customersList.iterator();
    while(i.hasNext())
    {
     DataObject customer = (DataObject)i.next();
    List ordersList = customer.getList("CUSTOMER_ORDER");
    Iterator j = ordersList.iterator();
    while (j.hasNext())
    {
    DataObject order = (DataObject)j.next();
    System.out.print( customer.get("CUSTFIRSTNAME") + " ");
    System.out.println( order.get("ORDERDATE"));
     }
    }
    Ahora cambie todos los clientes con el nombre Will por Matt.
    i = customersList.iterator();
    while(i.hasNext())
    {
     DataObject customer = (DataObject)i.next();
     if (customer.get("CUSTFIRSTNAME").equals("Will"))
     {
      customer.set("CUSTFIRSTNAME", "Matt");
     }
    }
    Suprima la primera entrada de cliente.
    ((DataObject) customersList.get(0)).delete();
    Añada un nuevo DataObject al gráfico
    DataObject newCust = graph.createDataObject("CUSTOMER");
    newCust.setInt("CUSTID", 12345);
    newCust.set("CUSTFIRSTNAME", "Will");
    newCust.set("CUSTLASTNAME", "Smith");
    newCust.set("CUSTSTREETADDRESS", "123 Main St.");
    newCust.set("CUSTCITY", "New York");
    newCust.set("CUSTSTATE", "NY");
    newCust.set("CUSTZIPCODE", "12345");
    newCust.setInt("CUSTAREACODE", 555);
    newCust.set("CUSTPHONENUMBER", "555-5555");
    
    graph.getList("CUSTOMER").add(newCust);
    Someta los cambios.
    mediator.applyChanges(graph);
  11. Envíe la información cambiada a DMS para actualizar la base de datos.

Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tdat_jdbcmeduse
File name: tdat_jdbcmeduse.html