Usando o Serviço Mediador de Dados do Java Database Connectivity para Acesso a Dados
As seguintes etapas demonstram como criar os metadados para um DMS (data mediator service JDBC (Java™ Database Connectivity), bem como instanciar o gráfico de dados do DMS.
Procedimento
- Crie o depósito de informações do provedor de metadados. Isso pode ser
usado para criar metadados, tabelas, colunas, filtros, argumentos de filtro, limitações de banco de
dados, chaves, objetos order-bys e relacionamentos.
MetadataFactory factory = MetadataFactory.eINSTANCE; Metadata metadata = factory.createMetadata();
- Crie a tabela para os metadados. Isso pode ser feito de
duas maneiras. O depósito de informações do provedor de metadados pode criar a tabela e, em seguida, a tabela
pode se incluir nos metadados já criados ou os metadados podem incluir uma nova tabela,
nesse caso, uma nova tabela é criada. Como envolve menos etapas,
este exemplo utiliza a segunda opção para criar uma tabela chamada CUSTOMER.
Table custTable = metadata.addTable("CUSTOMER");
- Defina a tabela raiz para os metadados. Novamente, isso pode ser
feito de duas maneiras. A tabela pode se declarar a raiz ou
os metadados podem definir sua própria tabela raiz. Para a primeira opção, codifique:
Se quiser utilizar a segunda opção, codifique:custTable.beRoot();
metadata.setRootTable(custTable)
- Configure as colunas da tabela. A tabela de exemplo é
chamada CUSTOMER. Cada coluna é criada utilizando seu tipo. Os tipos de colunas nos
metadados podem ser somente os tipos suportados pelo driver JDBC que está sendo utilizado. Se você tiver dúvidas sobre quais tipos o driver JDBC que está sendo utilizado suporta,
consulte a documentação do driver JDBC.
Esse exemplo cria um objeto de coluna para essa coluna, mas não para as demais. O motivo disso é que essa coluna é a chave primária e é usada para configurar a chave primária da tabela depois que o restante das colunas for incluída. Uma chave principal não pode ser nula; portanto, custID.setNullable(false) evita que isso ocorra. Incluindo as demais colunas:Column custID = custTable.addIntegerColumn("CUSTID"); custID.setNullable(false);
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);
- Crie outras tabelas conforme necessário. Para este exemplo, crie a
tabela Orders. Cada pedido é feito por um Cliente.
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);
- Crie chaves estrangeiras para as tabelas que precisam de relacionamentos. Neste exemplo, os pedidos têm uma
chave estrangeira que aponta para o cliente que fez o pedido. Para criar
uma relação entre as duas tabelas, você deve primeiro criar uma chave
estrangeira para a tabela Orders.
O relacionamento usa duas chaves, a chave pai e a chave filho. Como nenhum nome específico é fornecido, a concatenação padrão de CUSTOMER_ORDER é o nome utilizado para essa relação.Key custFK = factory.createKey(); custFK.getColumns().add(custFKColumn); orderTable.getForeignKeys().add(custFK);
A relação padrão inclui todos os clientes que têm pedidos. Para obter todos os clientes, mesmo se eles não tiverem pedidos, esta linha também é necessária:metadata.addRelationship(custTable.getPrimaryKey(), custFK);
Agora que as duas tabelas estão relacionadas uma à outra, você pode incluir um filtro na tabela Customer para localizar clientes com características específicas.metadata.getRelationship("CUSTOMER_ORDER") .setExclusive(false);
- Especifique quaisquer filtros necessários. Neste exemplo, defina os filtros para a tabela Customer para localizar todos os clientes
em um determinado estado, com um determinado sobrenome, que tenham feito 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);
- Inclua qualquer ordem por objetos necessários. Neste exemplo, defina a ordenação por objeto para classificar
pelo primeiro nome do cliente.
Isso conclui a criação dos metadados para esse DMS do JDBC.Column firstName = ((TableImpl)custTable).getColumn("CUSTFIRSTNAME"); OrderBy orderBy = factory.createOrderBy(); orderBy.setColumn(firstName); orderBy.setAscending(true); metadata.getOrderBys().add(orderBy);
- Crie uma conexão ao banco de dados. Este exemplo não mostra a criação da conexão com o banco de dados; ele supõe que o cliente SDO chama o método connect() que faz isso. Consulte o tópico,
- Instancie e inicialize o objeto DMS JDBC (dataGraph). O cliente SDO executa essas ações. Para
este exemplo:
Agora que possui o dataGraph, as informações podem ser manipuladas. O exemplo a seguir contém a manipulação de dados básica em um objeto DataGraph.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);
- Exemplo: Manipulando Dados em um Objeto DataGraph
Usando o DataGraph simples que foi criado durante a tarefa Usar o serviço do mediador de dados do Java Database Connectivity para acesso a dados, segue alguma manipulação de dados típica.
Primeiro, obtenha a lista de clientes, em seguida, para cada cliente obtenha cada pedido, em seguida, imprima o nome do cliente e a data do pedido. (Para esse exemplo, suponha que você já conheça o sobrenome 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")); } }
Agora altere cada cliente com nome Will para Matt.i = customersList.iterator(); while (i.hasNext()) { DataObject customer = (DataObject)i.next(); if (customer.get("CUSTFIRSTNAME").equals("Will")) { customer.set("CUSTFIRSTNAME", "Matt"); } }
Exclua a primeira entrada do Cliente.((DataObject) customersList.get(0)).delete();
Inclua um novo DataObject no gráficoDataObject 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);
Submeta as mudanças.mediator.applyChanges(graph);
- Submeta as informações alteradas ao DMS para atualizar o banco de dados.
Tarefas relacionadas:


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tdat_jdbcmeduse
Nome do arquivo: tdat_jdbcmeduse.html