4

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
4

1 回答 1

1

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

这是DatabaseConnection构造函数的javadoc

... schema - 数据库架构。请注意,模式名称区分大小写。这是必要的,因为名称相同但大小写不同的模式可以在一个数据库上共存。 ...

我猜 DBUnit 开发人员更正了模式名称的大小写,以避免这种行为可能导致的问题。

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

创建a 时,DBUnit 将从jdbc 连接中DatabaseConnection检索有关数据库的元数据,顺便说一下,这是一个实现。java.sql.DatabaseMetaData

之后,DBUnit 将通过检查元数据来更正模式名称,这就是您总是得到日志消息的原因。

DBUnit 使用以下方法DatabaseMetaData来检查

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

这是H2 jdbc驱动程序的实现

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

所以表“用户”变成了“用户”

于 2012-05-19T17:55:24.103 回答