データ・アクセスでの Java Database Connectivity データ・メディエーター・サービスの使用

次のステップではコード・サンプルを使用して、Java™ Database Connectivity (JDBC) データ・メディエーター・サービス (DMS) 向けのメタデータを作成する方法、 および DMS DataGraph をインスタンス化する方法について説明します。

手順

  1. メタデータ・ファクトリーを作成します。 これを使用して、メタデータ、テーブル、列、フィルター、フィルター引数、データベース制約、キー、Order-by オブジェクト、および関係を作成できます。
    MetadataFactory factory = MetadataFactory.eINSTANCE;
    Metadata metadata = factory.createMetadata();
  2. メタデータのテーブルを作成します。 2 つの方法でこれを行うことができます。 メタデータ・ファクトリーでテーブルを作成し、そのテーブルを既に作成されているメタデータに追加するか、 または既存のメタデータに新規テーブルを追加することができます (すなわち、新規テーブルが作成されます)。 この例では、実行するステップが少ない 2 番目のオプションを使用して、CUSTOMER というテーブルを作成します。
    Table custTable = metadata.addTable("CUSTOMER");
  3. メタデータのルート・テーブルを設定します。 同様に、これも 2 つの方法で行うことができます。 テーブルでそのテーブル自体をルートにすることを宣言する か、またはメタデータで独自のルート・テーブルを設定することができます。 最初のオプションの場合は、次のようにコード化します。
    custTable.beRoot();
    2 番目のオプションを使用する場合は、以下のようにコード化します。
    metadata.setRootTable(custTable)
  4. テーブルで列をセットアップします。 例のテーブルの名前は CUSTOMER です。 各列は、そのタイプを使用して作成されます。メタデータの列のタイプは、使用している JDBC ドライバーによってサポートされるタイプのみとなります。 使用している JDBC ドライバーがサポートするタイプについて疑問がある場合は、 JDBC ドライバーの資料を参照してください。
    Column custID = custTable.addIntegerColumn("CUSTID");
    custID.setNullable(false);
    この例では、この列の列オブジェクトを作成し、残りの列オブジェクトは作成しません。 この列が 1 次キーであり、残りの列が追加された後に、 テーブルの 1 次キーを設定するのに使用されるためです。 1 次キーをヌルにすることはできないため、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. 必要に応じて、他のテーブルを作成します。 この例では、注文のテーブルを作成します。 注文はそれぞれ 1 人の顧客によって行われます。
    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. 関係を必要とするテーブルの外部キーを作成します。 この例では、各注文は、注文をした顧客を示す外部キーを備えています。 2 つのテーブルの関係を作成するために、まず、注文テーブルの外部キーを作成する必要があります。
    Key custFK = factory.createKey();
    custFK.getColumns().add(custFKColumn);
    
    orderTable.getForeignKeys().add(custFK);
    関係には 2 つのキーがあります。 親キーと子キーです。 特定の名前がないため、CUSTOMER_ORDER のデフォルトの連結は、この関係に使用される名前です。
    metadata.addRelationship(custTable.getPrimaryKey(), custFK);
    デフォルトの関係は、注文した顧客全員を含みます。 注文していない顧客も全員取得するには、以下の行も必要です。
    metadata.getRelationship("CUSTOMER_ORDER") 
                                  .setExclusive(false); 
    これで、2 つのテーブルが互いに関連付けられ、 特定の特性をもつ顧客を検索するために顧客テーブルにフィルターを追加することができます。
  7. 必要なフィルターを指定します。 この例では、顧客テーブルにフィルターを設定して、特定の条件 (注文したことがある、特定の姓) に当てはまる顧客をすべて検索します。
    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. 必要な Order by オブジェクトを追加します。 この例では、Order by オブジェクトを設定して、顧客のファ ーストネームによってソートします。
    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");
     }
    }
    最初のカスタマー・エントリーを削除します。
    ((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