java – 更正了dbunit中的表名消息

根据模式定义,dbunit数据已使用小写表名填充.为什么每次都得到一个更正的表警告,我运行所有数据库的脚本(h2,mysql ..)

[INFO] [dbunit:operation {execution: seed data}] 120 [main] INFO org.dbunit.database.DatabaseDataSet -
        database name=H2
        database version=1.2.128 (2010-01-30)
        database major version=1
        database minor version=2
        jdbc driver name=H2 JDBC Driver
        jdbc driver version=1.2.128 (2010-01-30)
        jdbc driver major version=1
        jdbc driver minor version=2

127 [main] INFO org.dbunit.util.SQLHelper - class org.dbunit.database.DatabaseTableMetaData. Corrected table name: 
        oldValue=user newValue=USER

解决方法:

实际上DBUnit确实提到了这一点.

这是DatabaseConnection构造函数的javadoc

… schema – the database schema. Note that the schema name is case
sensitive. This is necessary because schemas with the same name but
different case can coexist on one database.

我想DBUnit开发人员纠正了模式名称的情况,以避免这种行为可能导致的问题.

DatabaseConnection是所有其他数据库指定的DatabaseConnection的通用超类,例如H2DatabaseConnection.

创建DatabaseConnection时,DBUnit将从jdbc连接中检索有关数据库的元数据,这是java.sql.DatabaseMetaData的实现方式.

之后,DBUnit将通过检查元数据来更正模式名称,这就是您始终获取日志消息的原因.

DBUnit使用以下DatabaseMetaData方法进行检查

boolean storesUpperCaseIdentifiers() throws SQLException;
boolean storesLowerCaseIdentifiers() throws SQLException;

这是H2 jdbc驱动程序的实现

public boolean storesUpperCaseIdentifiers() {
  debugCodeCall("storesUpperCaseIdentifiers");
  return true;
}

所以表“user”变成“USER”

上一篇:java – org.hibernate.event.def.EventCache不支持null实体是什么意思?


下一篇:java – Unitils / DBunit和数据库测试