¿Cómo me DBUnit a jugar bien con los tipos de datos de enumeración de MySQL?

StackOverflow https://stackoverflow.com/questions/706371

  •  22-08-2019
  •  | 
  •  

Pregunta

Estoy tratando de utilizar DBUnit a prueba algunos de nuestro código de acceso de base de datos y estoy corriendo en un problema. Estamos utilizando MySQL 5 una cosa u otra como base de datos en sí. He exportado un pequeño conjunto de datos a un FlatXmlDataSet y cuando I fijó el caso de prueba, se lanza una excepción que dice "datos truncados para la columna 'FHEIGHT_FLAG' en la fila 1". El FHEIGHT_FLAG columna se define como

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

La forma en que se han insertado los datos enum a la base de datos, si el valor real de la fuente de los datos no es cierto, entonces la columna contiene en realidad "" (cadena vacía). El código usando la base de datos es sólo hacer la suposición de que si el valor proporcionado por la base de datos no es 't', entonces debe ser falsa. ¿Cómo puedo hacer que esto? No puedo corregir los datos de origen, así que tengo que tratar de hacer algo con el caso de prueba.

¿Fue útil?

Solución

Exportación de un nuevo conjunto de datos, utilizando "select case when FHEIGHT_FLAG = 't' then 't' else 'f' end as FHEIGHT_FLAG, ....(all other columns) .... from tablename";

(Pero ordenar las columnas, ya que están en la mesa real, por supuesto.)

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"));

Otros consejos

acabé modificando la columna de la base de datos de prueba FHEIGHT_FLAG ser

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

de esa manera todos los valores de cadena vacía se permitió que se inserta la espalda.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top