DBに接続して、任意のテーブルあるいは全テーブルをDbUnitの形式でファイルに出力するユーティリティクラスを作りました。
org.dbunitng.data.TestDataFileMakerクラスです。
使い方は簡単です。
public TestDataFileMaker(String driver, String url, String userName,
String password, String schema) {
コンストラクタにJDBC接続に必要な情報を渡します。スキーマは特に必要なければnullを渡してください。
メソッドは2つあります。
public void extractTables(String targetDirectory, String[] tableNames, FileType type) public void extractAllTables(String targetDirectory, FileType type)
特定のテーブルだけ出力したい場合extractTables()を、全テーブルを出力する場合はextractAllTables()を呼び出してください。
引数は、targetDirectoryにファイルを出力するディレクトリを渡してください。存在していない場合はディレクトリを作成して出力します。
tableNamesはテーブル名の配列です。
FileTypeはEnumで、XML、EXCEL、CSVから選択してください。この形式でファイルを出力します。
たとえば、こんなテーブルがあるとします。
mysql> select * from dept; +--------+------------+----------+ | DEPTNO | DNAME | LOC | +--------+------------+----------+ | 10 | ACCOUNTING | NEW YORK | | 20 | RESEARCH | DALLAS | 以下省略 mysql> select * from emp; +-------+--------+-----------+------+------------+---------+---------+--------+ | EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO | +-------+--------+-----------+------+------------+---------+---------+--------+ | 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | 10.00 | 20 | | 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 | 以下省略
こういうコードでファイルに出力できます。
TestDataFileMaker maker = new TestDataFileMaker( "com.mysql.jdbc.Driver", "jdbc:mysql://127.0.0.1/testframework", "user", "password", null); String targetDir = "temp/xml/specified"; String[] tableNames = new String[] { "dept", "emp" }; maker.extractTables(targetDir, tableNames, FileType.XML);
するとtemp/xml/specifiedディレクトリにファイルを出力します。
temp/xml/specified -DEPT.xml -EMP.xml
内容もきちんとDbUnit形式です。
<?xml version='1.0' encoding='UTF-8'?> <dataset> <DEPT DEPTNO="10" DNAME="ACCOUNTING" LOC="NEW YORK"/> 以下省略
同様に、Excel形式でもCSV形式でも出力できます。
CSVであれば「table-ordering.txt」も出力します。