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