更正了 dbunit 中的表名消息

发布于 2024-08-21 23:28:46 字数 652 浏览 8 评论 0原文

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 data has been populated with lower case table names as per schema definition. Why do you get a corrected table warning every time, I run the scripts for all databases (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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

ら栖息 2024-08-28 23:28:46

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

这是DatabaseConnection构造函数的javadoc

... schema - 数据库架构。 请注意模式名称是大小写
敏感的。这是必要的,因为模式具有相同的名称,但
不同的情况可以共存于一个数据库上。
...

我猜 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”

Actually DBUnit does mention this.

Here is the javadoc of DatabaseConnection constructor

... 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.
...

I guess DBUnit developers correct the schema name case in order to avoid the problem that might cause by this behavior.

DatabaseConnection is the universal super class of all other database specified DatabaseConnection, H2DatabaseConnection for example.

When a DatabaseConnection is created, DBUnit will retrieve meta data about the database, which is an implementation of java.sql.DatabaseMetaData by the way, from the jdbc connection.

After that, DBUnit will correct the schema name by checking the metadata, that's the reason you always get the logging messages.

DBUnit use following methods of DatabaseMetaData to check

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

and here is the implementaion of H2 jdbc driver

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

so the table "user" becomes "USER"

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文