#author("2021-12-14T02:33:18+00:00","","")
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
[[DBUnit>Java/DBUnit]] というDB用のUnitテストツールがあるのですが、これにはDBをXML形式やExcel形式でExportする機能があります。またDBUnitにはAntタスクも付属していて、XML形式でExportするAntタスクなどがあります。

さてこのDBUnitにはExcelにExportするAntタスクがなかったので、作ってみました。

***ダウンロード [#nea2425e]
-[[excelExporter.jar>http://www.masatom.in/viewvc/trunk/ExportTask/lib/excelExporter.jar?root=Others&view=log]]

***インストール [#zb76c222]
前述の通り、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
が必要です。これらのライブラリは
-[[dbunit-2.1.tar.gz>http://sourceforge.net/project/showfiles.php?group_id=47439]]
-[[poi-bin-2.5.1-final-20040804.tar.gz>http://www.apache.org/dist/jakarta/poi/release/bin/]]

よりダウンロードできますので、ダウンロードしAnt内でパスを通してください。もちろん各DBのJDBCドライバのjarも必要です。


***サンプル [#a3f548b0]
-build.xml
 <?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>

-build.win.properties
 class.dir = classes
 jar.dir = lib



***ソースコード [#o59203d4]
 /*******************************************************************************
  * 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なので省略
 }


----
この記事は
#vote(おもしろかった[11],そうでもない[1])
#vote(おもしろかった[12],そうでもない[1])
-サイズがでかいとOutOfMemoryErrorとなってしまうので、環境変数ANT_OPTSにメモリ使用量を設定しよう。ANT_OPTSはAntを実行しているJavaのVM引数みたいです。 -- [[きの]] &new{2006-12-17 23:56:30 (日)};
-Windowsだと set ANT_OPTS=-Xmx512mなどです。Linuxだとexportですね。




#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS