Fight the Future

Java言語とJVM、そしてJavaエコシステム全般にまつわること

プレゼン、ボランティアコーチします!

勉強会でスピーカーをやりたいけど、プレゼンが初めて、苦手という方に無償でコーチします!資料レビューや録画リハへアドバイスします。Twitter@jyukutyoまでメンションでもDMでも。

私はデブサミやJJUG CCCなど200人規模で登壇経験ありです。海外での登壇も短いながらあり。デブサミ2017では公募スピーカー1位でした!

DbUnitライブラリでDBデータをXML,Excel,CSVに出力するクラスを作りました

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」も出力します。