Как мне заставить dbunit хорошо работать с типами данных MySQL?
Вопрос
Я пытаюсь использовать дбунит чтобы протестировать наш код доступа к базе данных, и я столкнулся с проблемой.Мы используем MySQL 5 то или иное, как сама база данных.Я экспортировал небольшой набор данных в Флэтксмлдатасет и когда я настраиваю тестовый пример, он выдает исключение, которое говорит: «Данные усечены для столбца «FHEIGHT_FLAG» в строке 1».Столбец FHEIGHT_FLAG определяется как
enum('t','f') default NULL
То, как перечисление данные вставляются в базу данных, если реальное значение источника данных не соответствует действительности, то столбец фактически содержит "" (пустую строку).Код, использующий базу данных, просто предполагает, что если значение, полученное из базы данных, не равно «t», то оно должно быть ложным.Как я могу это сделать?Я не могу исправить исходные данные, поэтому мне нужно попытаться что-то сделать с тестовым примером.
Решение
Экспортируйте новый набор данных, используя "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"));
Другие советы
В итоге я изменил столбец FHEIGHT_FLAG тестовой базы данных, чтобы он был
enum('','t','f') default NULL
таким образом все пустые строковые значения можно было вставить обратно.