DBUnit というDB用のUnitテストツールがあるのですが、これにはDBをXML形式やExcel形式でExportする機能があります。またDBUnitにはAntタスクも付属していて、XML形式でExportするAntタスクなどがあります。
さてこのDBUnitにはExcelにExportするAntタスクがなかったので、作ってみました。
前述の通り、ExcelにExportする機能自体はDBUnitを使用しています。またDBUnitはJakartaのPOI(ExcelをJavaで扱うAPI)を使用しているためPOIも必要です。具体的には
dbunit-2.1.jar poi-2.5.1-final-20040804.jar poi-contrib-2.5.1-final-20040804.jar poi-scratchpad-2.5.1-final-20040804.jar
が必要です。これらのライブラリは
よりダウンロードできますので、ダウンロードしAnt内でパスを通してください。もちろん各DBのJDBCドライバのjarも必要です。
<?xml version="1.0" encoding="Shift_JIS"?>
<project name="taskdef_sample" default="excelExport">
<property file="build.win.properties" />
<!-- クラスパス名の定義 -->
<path id="exporter.class.path">
<pathelement path="${java.class.path}" />
<pathelement path="${class.dir}" />
<pathelement path="${jar.dir}" />
<fileset dir="${jar.dir}">
<include name="**/*.jar" />
</fileset>
</path>
<!-- クラスパス名の定義 以上 -->
<taskdef name="excelExport" classname="nu.mine.kino.dbunit.ant.ExcelExportTask"
classpathref="exporter.class.path" />
<target name="excelExport">
<excelExport driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.10.5/hoge"
userid="hoge" password="fuga" schema="hoge"> <-DBの設定
<export dest="hoge.xls" /> <-出力先
</excelExport>
</target>
</project>class.dir = classes jar.dir = lib
/*******************************************************************************
* Copyright (c) 2006 Masatomi KINO.
* All rights reserved.
* $Id: ExcelExportTask.java,v 1.1 2006/12/17 07:02:58 cvsuser Exp $
*******************************************************************************/
//作成日: 2006/12/17
package nu.mine.kino.dbunit.ant;
import java.io.File;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.ITableIterator;
import org.dbunit.dataset.excel.XlsDataSet;
/**
* @author Masatomi KINO
* @version $Revision: 1.1 $
*/
public class ExcelExportTask extends Task {
private String driver;
private String url;
private String userId;
private String password;
private String schema;
private Export export;
public Export createExport() {
if (export == null) {
export = new Export();
}
return export;
}
public void execute() throws BuildException {
IDatabaseConnection con = null;
try {
con = getConnection();
IDataSet dataset = con.createDataSet();
ITableIterator iterator = dataset.iterator();
System.out.println("-------------------");
while (iterator.next()) {
System.out.println(iterator.getTableMetaData().getTableName());
}
System.out.println("-------------------");
XlsDataSet.write(dataset, new FileOutputStream(export.getDest()));
} catch (Exception e) {
e.printStackTrace();
throw new BuildException(e);
} finally {
try {
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
private IDatabaseConnection getConnection() throws Exception {
System.out.println("driver : " + driver);
System.out.println("url : " + url);
System.out.println("userId : " + userId);
System.out.println("password : " + password);
System.out.println("schema : " + schema);
System.out.println("export : " + new File(export.getDest()).getAbsolutePath());
Class driverClass = Class.forName(driver);
Connection connection = DriverManager.getConnection(url, userId,
password);
return new DatabaseConnection(connection, schema);
}
以下setterなので省略
}
この記事は
現在のアクセス:21302