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なので省略 }
この記事は
現在のアクセス:20233