【问题标题】:How do I get dbunit to play nice with MySQL enum data types?如何让 dbunit 与 MySQL 枚举数据类型搭配得很好?
【发布时间】:2010-10-16 22:08:20
【问题描述】:

我正在尝试使用dbunit 来测试我们的一些数据库访问代码,但遇到了问题。我们使用MySQL 5 或其他东西作为数据库本身。我将一小组数据导出到FlatXmlDataSet,当我设置测试用例时,它会抛出一个异常,上面写着“第 1 行的列 'FHEIGHT_FLAG' 的数据被截断”。 FHEIGHT_FLAG 列定义为

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

enum数据插入数据库的方式,如果数据源的真实值不为真,那么该列实际上包含“”(空字符串)。使用数据库的代码只是假设如果从数据库提供的值不是't',那么它一定是假的。我怎样才能做到这一点?我无法修复源数据,所以我必须尝试对测试用例做一些事情。

【问题讨论】:

    标签: java mysql dbunit


    【解决方案1】:

    我最终将测试数据库的 FHEIGHT_FLAG 列修改为

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

    这样所有的空字符串值都可以被插入回来。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-07
        • 2019-05-18
        • 1970-01-01
        • 1970-01-01
        • 2011-10-24
        相关资源
        最近更新 更多