Top / Java / Ant / DBをExcelにExportするAntタスク

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も必要です。

サンプル

  • 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

ソースコード

/*******************************************************************************
 * 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なので省略
}

この記事は

選択肢 投票
おもしろかった 11  
そうでもない 1  
  • サイズがでかいとOutOfMemoryError?となってしまうので、環境変数ANT_OPTSにメモリ使用量を設定しよう。ANT_OPTSはAntを実行しているJavaのVM引数みたいです。 -- きの? 2006-12-17 23:56:30 (日)
  • Windowsだと set ANT_OPTS=-Xmx512mなどです。Linuxだとexportですね。

Top / Java / Ant / DBをExcelにExportするAntタスク

現在のアクセス:16110


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-01-04 (水) 09:29:58 (264d)