人们!
我在使用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格式信息。
有人能帮助我吗?
谢谢,
杰夫
答案 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方法中添加特定代码,用初始数据填充表格。