目次へ

5.2 CompsiteDataSet

もうひとつ便利なデータセットを紹介します。「3. 更新メソッドのテスト」では、AcceptOrderBeanクラスのinsertメソッドのテストを作成しました。そのときに、「メソッド実行前のテーブルデータ」「メソッド実行後のテーブルデータ」の2つを表すテストデータをXMLで作成しました。

accept_order_data.xml
<?xml version='1.0' encoding="EUC-JP"?>

<dataset>
  <ACCEPT_ORDER o_num="5001" c_num="1000" p_num="501" dc_rate="5" 
                   option_price="30" employee="101" accept_date="2004-01-01" />
  <ACCEPT_ORDER o_num="5002" c_num="1001" p_num="502" dc_rate="10" 
                   option_price="20" employee="104" accept_date="2004-02-02" />
  <ACCEPT_ORDER o_num="5003" c_num="1002" p_num="503" dc_rate="15" 
                   option_price="10" employee="101" accept_date="2004-01-31" />
</dataset>
accept_order_data2.xml
<?xml version='1.0' encoding="EUC-JP"?>
<dataset>
  <ACCEPT_ORDER o_num="5001" c_num="1000" p_num="501" dc_rate="5" 
                   option_price="30" employee="101" accept_date="2004-01-01" />
  <ACCEPT_ORDER o_num="5002" c_num="1001" p_num="502" dc_rate="10" 
                   option_price="20" employee="104" accept_date="2004-02-02" />
  <ACCEPT_ORDER o_num="5003" c_num="1002" p_num="503" dc_rate="15" 
                   option_price="10" employee="101" accept_date="2004-01-31" />
  <ACCEPT_ORDER o_num="5004" c_num="1004" p_num="501" dc_rate="20" 
                   option_price="400" employee="101" accept_date="2004-01-03" />
</dataset>

ただ、insertメソッドはデータを1行だけ追加するメソッドです。ですから、accept_order_data.xmlではaccept_order_data2.xmlでは、o_numが5001から5003までのデータが重複しています。これでは、XMLファイルのメンテナンスが大変です。

このような場合、CompositeDataSetが便利です。CompositeDataSetを利用すれば、複数のデータセットをまとめてひとつのデータセットとして取り扱うことができます。使い方は、簡単です。まず、データファイルを用意するのですが、「メソッド実行後のテーブルデータ」全てを記述するのではなく「insertメソッド実行後に増えるデータ」のみを記述します。

accept_order_insert_data.xml
<?xml version='1.0' encoding="EUC-JP"?>
<dataset>
    <!-- insertメソッドを実行すると、以下の1行が増えるはず-->
    <ACCEPT_ORDER o_num="5004" c_num="1004" p_num="501" dc_rate="20" 
                   option_price="400" employee="101" accept_date="2004-01-03" />
</data>

すると、「メソッド実行後のテーブルデータ」は"accept_order_data.xml"のデータと"accept_order_insert_data.xml"のデータをあわせたものになります。

IDataSet beforeDataSet=new FlatXmlDataSet(new FileInputStream("accept_order_data.xml"));
IDataSet insertDataSet=new FlatXmlDataSet(new FileInputStream("accept_order_insert_data.xml"));


CompositeDataSet expectedDataSet 
     = new CompositeDataSet(beforeDataSet,insertedDataSet);

CompositeDataSetのコンストラクタの引数で、どのデータセットとどのデータセットをまとめてひとつにするか、指定します。ここでは、beforeDataSetとinsertDataSetをまとめてひとつのデータセットとしています。

実習課題2

3章の実習課題1をCompositeDataSetを使用するように修正しなさい。

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp