DBUnit:包含MySQL YEAR类型列的数据集

时间:2016-06-15 21:02:24

标签: java mysql dbunit

人们!

我在使用DBUnit时遇到问题:

在我的测试类中,当我调用 DatabaseOperation.INSERT.execute(connection,dataSet)时,使用引用包含YEAR(4)类型列的表的FlatXmlDataSet - MySQL - 我得到以下内容:

(...)
Caused by: org.dbunit.dataset.datatype.TypeCastException: Error casting value for table 'Vehicle' and column 'LaunchYear'
    at org.dbunit.operation.AbstractBatchOperation.execute(AbstractBatchOperation.java:210)
    at net.carroramafleet.ws.utils.DbUnitHelper.execute(DbUnitHelper.java:57)
    ... 33 more
Caused by: org.dbunit.dataset.datatype.TypeCastException: Unable to typecast value <2010> of type <java.lang.String> to DATE
    at org.dbunit.dataset.datatype.DateDataType.typeCast(DateDataType.java:110)
    at org.dbunit.dataset.datatype.DateDataType.setSqlValue(DateDataType.java:141)
    at org.dbunit.database.statement.SimplePreparedStatement.addValue(SimplePreparedStatement.java:73)
    at org.dbunit.database.statement.AutomaticPreparedBatchStatement.addValue(AutomaticPreparedBatchStatement.java:63)
    at org.dbunit.operation.AbstractBatchOperation.execute(AbstractBatchOperation.java:200)
    ... 34 more

这是我的数据集:

<dataset>
    <Vehicle 
            ID="999" 
            LaunchYear="2010" />
</dataset>

正如我上面提到的,我在表车辆中有年(4)类型列 LaunchYear 。并且DBUnit无法插入此行,因为此信息无法正确转换。

我已经尝试过replace this information using DBUnit's ReplacementDataSet,但我仍然遇到TypeCastException问题。我真的无法设置有效的YEAR格式信息。

有人能帮助我吗?

谢谢,

杰夫

1 个答案:

答案 0 :(得分:0)

这个问题有点陈旧,但我想我会回复,因为我今天遇到了同样的问题。

我相信这是DbUnit中的一个错误。顺便说一句,我使用的是2.4.9,但确实检查了以后版本的发行说明,看看是否将其作为错误修复提及。

YEAR列正在转换为java.sql.Date对象。最初的错误是没有来自简单字符串的转换&#34; 2016&#34;到java.sql.Date。这导致了TypeCastException。将此字段更改为&#34; 2016-08-10&#34;让你超过这个初始错误,但当MySql试图将Date截断为整数或短整数时,会导致SQLException。

我能够解决这个问题的唯一方法是在@SetUp或@Before方法中添加特定代码,用初始数据填充表格。