Fight the Future

Java言語とJVM、そしてJavaエコシステム全般にまつわること

DbUnitでSQL文の結果をそのままデータセットにする

	public static void main(String[] args) throws Exception {

		JdbcDatabaseTester tester =
			new JdbcDatabaseTester(
				"com.mysql.jdbc.Driver",
				"jdbc:mysql://127.0.0.1/testframework",
				"root",
				"root");
		
		QueryDataSet dataSet = new QueryDataSet(tester.getConnection());
		// retrieve all rows from specified table
		dataSet.addTable("EMP");
		
		// retrieve rows that is result of argument query
		dataSet.addTable("EMP_UNDER_7500", "select * from emp where empno < 7500");

		output(dataSet);
	}

	protected static void output(IDataSet dataSet) throws DataSetException {
		for (String name : dataSet.getTableNames()) {
			ITable table = dataSet.getTable(name);
			System.out.print("Table name:"
				+ table.getTableMetaData().getTableName());
			System.out.println("\tRow count:" + table.getRowCount());
		}
	}

QueryDataSet#addTable()でデータベースにあるレコードをデータセットに追加します。
引数が1つのものは、DBのテーブル名を渡します。そのテーブルのレコードをすべてITableにしてデータセットに追加します。
引数が2つのものは、第1引数は任意の文字列です。それがITableの名前になります。第2引数に実行するSQLを記述します。


このサンプルを実行するとこんな感じです。

Table name:EMP	Row count:14
Table name:EMP_UNDER_7500	Row count:2