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


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tdat_jdbcmeduse
파일 이름:tdat_jdbcmeduse.html