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

标签 java jdbc 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 的所有其他数据库的通用父类(super class),例如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 - 更正了 dbunit 中的表名消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2294415/

相关文章:

java - Java中将ArrayList转换为mysql插入参数

java - dbunit 测试用例抛出 NoSuchTableException

java - dbUnit dtd 错误 : The declaration for element type "dataset" must end with '>'

spring - 从 Maven 命令行获取 HSQL 连接时 JPA 测试挂起

java - 使用 JDBC 从 Hive 表中选择数组字段

java - 抛出异常后回滚事务

java - Java 中的缓冲读取器、行计数、拆分、解析

java - 了解 DatabaseMetaData 的方法

java - MySQLIntegrityConstraintViolationException 未在异常消息中显示列名

java - android中的计算器多操作数