如何让dbunit与MySQL枚举数据类型一起玩?

时间:2009-04-01 16:34:45

标签: java mysql dbunit

我正在尝试使用dbunit测试一些我们的数据库访问代码,而且我遇到了问题。我们使用MySQL 5某些东西作为数据库本身。我将一小组数据导出到FlatXmlDataSet,当我设置测试用例时,它会抛出一个异常,说明“第1行的列'FHEIGHT_FLAG'的数据被截断”。列FHEIGHT_FLAG定义为

enum('t','f') default NULL

enum数据插入数据库的方式,如果数据源的实际值不为真,则该列实际包含“”(空字符串)。使用数据库的代码只是假设如果数据库提供的值不是't',那么它必须是false。我怎么能这样做?我无法修复源数据,因此我必须尝试使用​​测试用例。

2 个答案:

答案 0 :(得分:2)

使用"select case when FHEIGHT_FLAG = 't' then 't' else 'f' end as FHEIGHT_FLAG, ....(all other columns) .... from tablename";

导出新数据集

(但是,当然,按照它们在真实表中的顺序排序。)

final String select = "select case when FHEIGHT_FLAG = 't' then 't' else 'f' end as FHEIGHT_FLAG, ....(all other columns) .... from tablename";
// database connection
Class driverClass = Class.forName("package.of.jdbcDriver");
Connection jdbcConnection = DriverManager.getConnection(
        "jdbc:url:of:db", "user", "pass");
IDatabaseConnection connection = new DatabaseConnection(jdbcConnection);

// partial database export
QueryDataSet partialDataSet = new QueryDataSet(connection);
partialDataSet.addTable("Tablename", select);

FlatXmlDataSet.write(partialDataSet, new FileOutputStream("mydataset.xml"));

答案 1 :(得分:0)

我最终将测试数据库FHEIGHT_FLAG列修改为

enum('','t','f') default NULL

这样就可以插回所有空字符串值。