DBUNIT, HSQLDB, data type (16, ‘BOOLEAN’) not recognized and will be ignored. See FAQ for more information.

Posted on Sunday, July 29, 2007

3


We are using HSQLDB (1.8.0.1) as the in memory database for our DBUNIT (2.1) test cases. Suddenly when trying to insert from our XML datafile to a boolean field we started getting an error which said

WARNING – APP_USER.ACCOUNT_EXPIRED data type (16, ‘BOOLEAN’) not recognized and will be ignored. See FAQ for more information.

It looks like the SQL type Types.BOOLEAN is not handled correctly. The way around is that

  • Create a new data type factory that extends the DBUnit class DefaultDataTypeFactory like this

import java.sql.Types;

import org.dbunit.dataset.datatype.DataType;
import org.dbunit.dataset.datatype.DataTypeException;
import org.dbunit.dataset.datatype.DefaultDataTypeFactory;

/**
* @author vhazrati
*
*/
public class HsqlDataTypeFactory extends DefaultDataTypeFactory {

@Override
public DataType createDataType(int sqlType, String sqlTypeName) throws DataTypeException {
if (sqlType == Types.BOOLEAN) {
return DataType.BOOLEAN;
}

return super.createDataType(sqlType, sqlTypeName);
}
}

  • Now use this Data type factory like this in your setup

protected void setUpMemoryDatabase() {
DataSource ds = jdbcTemplate.getDataSource();
Connection con = DataSourceUtils.getConnection(ds);
IDatabaseConnection connection = new DatabaseConnection(con);
try {
DatabaseConfig config = connection.getConfig();
config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new HsqlDataTypeFactory());
IDataSet dataSet = new FlatXmlDataSet(new File(“src/test/resources/test-dataset.xml”));

DatabaseOperation.CLEAN_INSERT.execute(connection, dataSet);
} catch (Exception e) {
log.debug(e);
} finally {
try {
connection.close();
} catch (SQLException e) {
log.debug(e);
e.printStackTrace();
}
}
}

Posted in: dbunit, hsqldb, testing