Как заставить dbunit хорошо играть с типами данных перечислений MySQL? - PullRequest
1 голос
/ 01 апреля 2009

Я пытаюсь использовать dbunit для проверки кода доступа к нашей базе данных, и у меня возникла проблема. Мы используем MySQL 5 в качестве базы данных. Я экспортировал небольшой набор данных в FlatXmlDataSet и при настройке контрольного примера выдает исключение, которое говорит: «Данные усечены для столбца« FHEIGHT_FLAG »в строке 1». Столбец FHEIGHT_FLAG определяется как

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

Способ, которым данные enum вставляются в базу данных. Если реальное значение для источника данных неверно, тогда столбец фактически содержит "" (пустая строка). Код, использующий базу данных, просто делает предположение, что если значение, предоставленное из базы данных, не равно 't', то оно должно быть ложным. Как я могу заставить это пойти? Я не могу исправить исходные данные, поэтому я должен попытаться что-то сделать с тестовым примером.

Ответы [ 2 ]

2 голосов
/ 02 апреля 2009

Экспорт нового набора данных, используя "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"));
0 голосов
/ 03 апреля 2009

В результате я изменил столбец FHEIGHT_FLAG тестовой базы данных на

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

таким образом, все пустые строковые значения можно было вставить обратно.

...