Fight the Future

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

DbUnit形式でExcelまたはXMLファイルにテーブルのダンプを取る

import java.io.FileOutputStream;

import org.dbunit.JdbcDatabaseTester;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.excel.XlsDataSet;
//import org.dbunit.dataset.xml.FlatXmlDataSet;

public class TablesDumper {

	/**
	 * テーブルのダンプをXls(or XML)ファイルに出力する。
	 * 
	 * @param args
	 *            使用しない
	 * @throws Exception データベースもしくはファイル操作で例外が発生したとき
	 */
	public static void main(String[] args) throws Exception {

		JdbcDatabaseTester tester = new JdbcDatabaseTester(
				"com.mysql.jdbc.Driver",
				"jdbc:mysql://127.0.0.1/データベース名", "ユーザー名", "パスワード");
		IDatabaseConnection connection = tester.getConnection();
		String[] tableNamesToDump = new String[] { "DEPT", "EMP" };
		IDataSet target = connection.createDataSet(tableNamesToDump);
		//FileOutputStream stream = new FileOutputStream("dept-emp.xml");
		FileOutputStream stream = new FileOutputStream("dept-emp.xls");
		//FlatXmlDataSet.write(target, stream);
		XlsDataSet.write(target, stream);
	}

}

実行すると、dept-emp.xlsを作成する。
1シート1テーブルの形式になる。
f:id:jyukutyo:20080730111602p:image

XML形式で出力する場合はコメントを外し、代わりにExcel関連のコードを消す。
XMLで出力すると以下のようになる。

<?xml version='1.0' encoding='UTF-8'?>
<dataset>
  <DEPT DEPTNO="10" DNAME="ACCOUNTING" LOC="NEW YORK"/>
  <DEPT DEPTNO="20" DNAME="RESEARCH" LOC="DALLAS"/>
  <DEPT DEPTNO="30" DNAME="SALES" LOC="CHICAGO"/>
  <DEPT DEPTNO="40" DNAME="OPERATIONS" LOC="BOSTON"/>
  <EMP EMPNO="7369" ENAME="SMITH" JOB="CLERK" MGR="7902" HIREDATE="1980-12-17" SAL="800.0" DEPTNO="20"/>
  <EMP EMPNO="7499" ENAME="ALLEN" JOB="SALESMAN" MGR="7698" HIREDATE="1981-02-20" SAL="1600.0" COMM="300.0" DEPTNO="30"/>
  <EMP EMPNO="7521" ENAME="WARD" JOB="SALESMAN" MGR="7698" HIREDATE="1981-02-22" SAL="1250.0" COMM="500.0" DEPTNO="30"/>
  <EMP EMPNO="7566" ENAME="JONES" JOB="MANAGER" MGR="7839" HIREDATE="1981-04-02" SAL="2975.0" DEPTNO="20"/>
  <EMP EMPNO="7654" ENAME="MARTIN" JOB="SALESMAN" MGR="7698" HIREDATE="1981-09-28" SAL="1250.0" COMM="1400.0" DEPTNO="30"/>
  <EMP EMPNO="7698" ENAME="BLAKE" JOB="MANAGER" MGR="7839" HIREDATE="1981-03-01" SAL="2850.0" DEPTNO="30"/>
  <EMP EMPNO="7782" ENAME="CLARK" JOB="MANAGER" MGR="7839" HIREDATE="1981-01-09" SAL="2450.0" DEPTNO="10"/>
  <EMP EMPNO="7788" ENAME="SCOTT" JOB="ANALYST" MGR="7566" HIREDATE="1982-12-09" SAL="3000.0" DEPTNO="20"/>
  <EMP EMPNO="7839" ENAME="KING" JOB="PRESIDENT" HIREDATE="1981-11-17" SAL="5000.0" DEPTNO="10"/>
  <EMP EMPNO="7844" ENAME="TURNER" JOB="SALESMAN" MGR="7698" HIREDATE="1981-09-08" SAL="1500.0" COMM="0.0" DEPTNO="30"/>
  <EMP EMPNO="7876" ENAME="ADAMS" JOB="CLERK" MGR="7788" HIREDATE="1983-01-12" SAL="1100.0" DEPTNO="20"/>
  <EMP EMPNO="7900" ENAME="JAMES" JOB="CLERK" MGR="7698" HIREDATE="1981-12-03" SAL="950.0" DEPTNO="30"/>
  <EMP EMPNO="7902" ENAME="FORD" JOB="ANALYST" MGR="7566" HIREDATE="1981-12-03" SAL="3000.0" DEPTNO="20"/>
  <EMP EMPNO="7934" ENAME="MILLER" JOB="CLERK" MGR="7782" HIREDATE="1982-01-23" SAL="1300.0" DEPTNO="10"/>
</dataset>