DBからテストデータファイルを生成する

DBに接続して、任意のテーブルあるいは全テーブルをDbUnitの形式でファイルに出力するユーティリティクラスを作りました。

org.dbunitng.data.TestDataFileMakerクラスです。 使い方は簡単です。

  1. public TestDataFileMaker(String driver, String url, String userName,
  2. String password, String schema) {
コンストラクタにJDBC接続に必要な情報を渡します。スキーマは特に必要なければnullを渡してください。

メソッドは2つあります。

  1. public void extractTables(String targetDirectory, String[] tableNames,
  2. FileType type)
  3. public void extractAllTables(String targetDirectory, FileType type)
特定のテーブルだけ出力したい場合extractTables()を、全テーブルを出力する場合はextractAllTables()を呼び出してください。

引数は、targetDirectoryにファイルを出力するディレクトリを渡してください。

存在していない場合はディレクトリを作成して出力します。

tableNamesはテーブル名の配列です。

FileTypeはEnumで、XML、EXCEL、CSVから選択してください。この形式でファイルを出力します。

たとえば、こんなテーブルがあるとします。

  1. mysql> select = from dept;
  2. +--------+------------+----------+
  3. | DEPTNO | DNAME | LOC |
  4. +--------+------------+----------+
  5. | 10 | ACCOUNTING | NEW YORK |
  6. | 20 | RESEARCH | DALLAS |
  7. 以下省略
  8. mysql> select = from emp;
  9. +-------+--------+-----------+------+------------+---------+---------+--------+
  10. | EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
  11. +-------+--------+-----------+------+------------+---------+---------+--------+
  12. | 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | 10.00 | 20 |
  13. | 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 |
  14. 以下省略
こういうコードでファイルに出力できます。
  1. TestDataFileMaker maker =
  2. new TestDataFileMaker(
  3. "com.mysql.jdbc.Driver",
  4. "jdbc:mysql://127.0.0.1/testframework",
  5. "user",
  6. "password",
  7. null);
  8. String targetDir = "temp/xml/specified";
  9. String[] tableNames = new String[] { "dept", "emp" };
  10. maker.extractTables(targetDir, tableNames, FileType.XML);
するとtemp/xml/specifiedディレクトリにファイルを出力します。
  1. temp/xml/specified
  2. * DEPT.xml
  3. * EMP.xml
内容もきちんとDbUnit形式です。
  1. <?xml version='1.0' encoding='UTF * 8'?>
  2. <dataset>
  3. <DEPT DEPTNO="10" DNAME="ACCOUNTING" LOC="NEW YORK"/>
  4. 以下省略
同様に、Excel形式でもCSV形式でも出力できます。

CSVであれば「table * ordering.txt」も出力します。