さて、Java/DBUnit/XMLでImport,Exportする でxmlファイルをimport/exportできるのはわかりましたが、このxmlファイルを手で作らなくてはいけないんだったら、結局面倒ですね。つうことで今度はExcel形式でExportします。AntタスクにはExcel関連のものはないっぽく、プログラムを作る必要があります。っても以下の感じ。
public static void main(String[] args) { DOMConfigurator.configure("log4j.xml"); IDatabaseConnection con = null; try { con = getConnection(); IDataSet dataset = con.createDataSet(); XlsDataSet.write(dataset, new FileOutputStream("export.xls")); } catch (Exception e) { e.printStackTrace(); } finally { try { if (con != null) { con.close(); } } catch (SQLException e) { e.printStackTrace(); } } }
getConnectionは以下のようにしました。DataSource?を作るのが面倒だったのでDIでInjectionしてます。
protected static IDatabaseConnection getConnection() throws Exception { ApplicationContext context = new ClassPathXmlApplicationContext( new String[] { "hibernate-spring_test.xml" }); DataSource datasource = (DataSource) context.getBean("dataSource"); return new DatabaseConnection(datasource.getConnection(), "webdb1");<-schema名 }
でdataSourceのJavaBeans?はorg.apache.commons.dbcp.BasicDataSource?を使ってこんな感じ。
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://192.168.10.5/webdb1?useUnicode=true&characterEncoding=ujis</value> </property> <property name="username"><value>xxxx</value></property> <property name="password"><value>xxxx</value></property> </bean>
実行するとexport.xlsが出力されます。内容は以下の通り
テーブルがExcelのシートになってるところがシブイです。
さて最後です。Excelファイルをimportします。さっきのxlsファイルをインポートデータとして使用します。import.xlsとしました。
public static void main(String[] args) { DOMConfigurator.configure("log4j.xml"); IDatabaseConnection con = null; try { con = getConnection(); // <- Exportのときと同じ IDataSet dataset = new XlsDataSet(new File("import.xls")); DatabaseOperation.CLEAN_INSERT.execute(con, dataset); // deleteしてからinsert } catch (Exception e) { e.printStackTrace(); } finally { try { if (con != null) { con.close(); } } catch (SQLException e) { e.printStackTrace(); } } }
実行すれば、全件Delete後import.xlsの内容がテーブルに反映されます。簡単ですね。
これでテストデータをオラーってExcelで作成して、ドカンとimportができそうです。結構便利です。
この記事は
現在のアクセス:52296