데이터 액세스를 위한 Java Database Connectivity 데이터 중개자 서비스 사용

다음 단계는 DMS dataGraph를 인스턴스화하는 방법뿐 아니라 JDBC(Java™ Database Connectivity) 데이터 중개자 서비스(DMS)에 대한 메타데이터를 작성하는 방법에 대해 설명합니다.

프로시저

  1. 메타데이터 팩토리를 작성하십시오. 이는 메타데이터, 테이블, 열, 필터, 필터 인수, 데이터베이스 제한조건, 키, 정렬 기준 오브젝트 및 관계를 작성하는 데 사용할 수 있습니다.
    MetadataFactory factory = MetadataFactory.eINSTANCE;
    Metadata metadata = factory.createMetadata();
  2. 메타데이터에 대한 테이블을 작성하십시오. 두 가지 방법으로 이를 수행할 수 있습니다. 메타데이터 팩토리가 테이블을 작성한 후 테이블 자체를 이미 작성된 메타데이터에 추가하거나 새 테이블이 작성되는 경우에 메타데이터가 새 테이블을 추가할 수 있습니다. 이 방법이 더 적은 단계를 포함하기 때문에 이 예에서는 두 번째 옵션을 사용하여 CUSTOMER라는 테이블을 작성합니다.
    Table custTable = metadata.addTable("CUSTOMER");
  3. 메타데이터에 대한 루트 테이블을 설정하십시오. 다시, 두 가지 방법으로 이를 수행할 수 있습니다. 테이블이 그 자체를 루트로 선언하거나 메타데이터가 자신의 루트 테이블을 설정할 수 있습니다. 첫 번째 옵션의 경우, 코드는 다음과 같습니다.
    custTable.beRoot();
    두 번째 옵션을 사용하려는 경우, 코드는 다음과 같습니다.
    metadata.setRootTable(custTable)
  4. 테이블에서 열을 설정하십시오. 이 테이블 예를 CUSTOMER로 부릅니다. 각 열은 해당 유형을 사용하여 작성됩니다. 메타데이터의 열 유형은 사용 중인 JDBC 드라이버에서 지원하는 유형만이 가능합니다. 사용 중인 JDBC 드라이버가 지원하는 유형을 보려면 JDBC 드라이버 문서를 참조하십시오.
    Column custID = custTable.addIntegerColumn("CUSTID");
    custID.setNullable(false);
    이 예에서는 이 열에 대한 열 오브젝트를 작성하지만 나머지에 대해서는 작성하지 않습니다. 이유는 이 열이 기본 키이고 나머지 열이 추가된 후 테이블의 기본 키를 설정하는 데 사용되기 때문입니다. 기본 키는 널일 수 없으므로 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);
  5. 필요에 따라 다른 테이블을 작성하십시오. 이 예의 경우 Orders 테이블을 작성하십시오. 각 주문은 한 명의 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. 관계가 필요한 테이블에 대해 외부 키를 작성하십시오. 이 예에서는 주문이 해당 주문을 한 고객을 가리키는 외부 키를 갖습니다. 두 테이블 사이의 관계를 작성하기 위해 먼저 Orders 테이블에 대한 외부 키를 작성해야 합니다.
    Key custFK = factory.createKey();
    custFK.getColumns().add(custFKColumn);
    
    orderTable.getForeignKeys().add(custFK);
    관계에는 상위 키와 하위 키의 두 키가 필요합니다. 제공된 특정 이름이 없으므로 기본 결합인 CUSTOMER_ORDER가 이 관계에 사용되는 이름입니다.
    metadata.addRelationship(custTable.getPrimaryKey(), custFK);
    기본 관계는 주문을 하는 모든 고객을 포함합니다. 주문을 하지 않은 고객까지 포함하여 모든 고객을 확보하려면 다음 행도 있어야 합니다.
    metadata.getRelationship("CUSTOMER_ORDER") 
                                  .setExclusive(false); 
    이제 두 테이블이 서로 관련되어 있으므로 Customer 테이블에 필터를 추가하여 특정 특성의 고객을 찾을 수 있습니다.
  7. 필요한 필터를 지정하십시오. 이 예에서는 Customer 테이블에 필터를 설정하여 특정한 상태에 있는 특정 성씨를 가진 모든 주문 고객을 찾으십시오.
    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. 필요한 모든 정렬 기준 오브젝트를 추가하십시오. 이 예에서는 고객의 이름순으로 정렬하도록 정렬 기준 오브젝트를 설정하십시오.
    Column firstName = ((TableImpl)custTable).getColumn("CUSTFIRSTNAME");
    OrderBy orderBy = factory.createOrderBy();
    orderBy.setColumn(firstName);
    orderBy.setAscending(true);
    metadata.getOrderBys().add(orderBy);
    이것은 이 JDBC DMS에 대한 메타데이터 작성을 완료합니다.
  9. 데이터베이스에 대한 연결을 작성하십시오. 이 예는 데이터베이스 연결 작성을 보여주지 않습니다. SDO 클라이언트가 이를 수행하는 connect() 메소드를 호출한다고 가정합니다. 해당 주제를 참조하십시오.
  10. JDBC DMS 오브젝트(dataGraph)를 인스턴스화하고 초기화하십시오. SDO 클라이언트가 이 조치를 수행합니다. 이 예의 경우:
    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);
    이제 dataGraph가 있으므로 정보를 조작할 수 있습니다. 다음 예에는 DataGraph 오브젝트에 있는 데이터의 기본 조작이 들어 있습니다.
    예: DataGraph 오브젝트의 데이터 조작

    데이터 액세스를 위한 Java Database Connectivity 데이터 중개자 서비스 사용 태스크 중에 작성된 단순 DataGraph를 사용할 때 몇 가지 일반적인 데이터 조작은 다음과 같습니다.

    첫 번째, 고객 목록을 확보한 후 각 고객에 대한 모든 주문을 가져온 후 고객의 이름과 주문 날짜를 인쇄하십시오. (이 예의 경우 이미 성이 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"));
     }
    }
    이제 이름이 Will인 모든 고객을 Matt로 변경하십시오.
    i = customersList.iterator();
    while(i.hasNext()){
     DataObject customer = (DataObject)i.next();
     if (customer.get("CUSTFIRSTNAME").equals("Will"))
     {
      customer.set("CUSTFIRSTNAME", "Matt");
     }
    }
    첫 번째 Customer 항목을 삭제하십시오.
    ((DataObject) customersList.get(0)).delete();
    그래프에 새 DataObject를 추가하십시오.
    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);
    변경을 제출하십시오.
    mediator.applyChanges(graph);
  11. 데이터베이스 업데이트를 위해 DMS에 변경된 정보를 제출하십시오.

주제 유형을 표시하는 아이콘 태스크 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tdat_jdbcmeduse
파일 이름:tdat_jdbcmeduse.html