数据库单元;混淆表/列名区分大小写

Posted

技术标签:

【中文标题】数据库单元;混淆表/列名区分大小写【英文标题】:DBunit; confusion over case sensitivity on table/column names 【发布时间】:2011-01-13 16:53:16 【问题描述】:

我在启动应用程序时收到此错误

Caused by: org.dbunit.dataset.NoSuchColumnException: CLIENT.ID -  (Non-uppercase input column: ID) in ColumnNameToIndexes cache map. Note that the map's column names are NOT case sensitive

我不太清楚为什么会这样,因为我的表/列名称都以大写形式引用(即使消息坚持这不应该是问题)

我的桌子:

mysql> describe CLIENT;
+------------------+--------------+------+-----+---------+----------------+
| Field            | Type         | Null | Key | Default | Extra          |
+------------------+--------------+------+-----+---------+----------------+
| ID               | int(11)      | NO   | PRI | NULL    | auto_increment |
| jdoDetachedState | tinyblob     | YES  |     | NULL    |                |
| NAME             | varchar(255) | NO   |     | NULL    |                |
| ADDRESS1         | varchar(255) | YES  |     | NULL    |                |
| ADDRESS2         | varchar(255) | YES  |     | NULL    |                |
| COUNTRY          | varchar(255) | YES  |     | NULL    |                |
| COUNTY           | varchar(255) | YES  |     | NULL    |                |
| MAINPHONENUMBER  | varchar(255) | YES  |     | NULL    |                |
| POSTCODE         | varchar(255) | YES  |     | NULL    |                |
| SECTOR           | varchar(255) | YES  |     | NULL    |                |
| TOWN             | varchar(255) | YES  |     | NULL    |                |
| WEBSITEURL       | varchar(255) | YES  |     | NULL    |                |
+------------------+--------------+------+-----+---------+----------------+
12 rows in set (0.00 sec)

mysql> 

我的域实体的片段:

@Id
@GeneratedValue
@Column(name="ID")
private Integer id;

我试图强制 DBUnit 使用的测试日期片段:

<dataset>
  <CLIENT ID="-1"
    ADDRESS1="Endeavour House"
    ADDRESS2="Russell Rd"
    COUNTRY="England"
    COUNTY="Suffolk"
    MAINPHONENUMBER="0845 606 6067"
    NAME="Suffolk County Council"
    POSTCODE="IP1 2BX"
    SECTOR="Local Government"
    TOWN="Ipswich"
    WEBSITEURL="www.suffolk.gov.uk"/>
</dataset>

我想不出其他可以尝试的方法,删除了表并重新编译了 java 代码,有什么想法吗?

【问题讨论】:

看起来可能有一个关于这个的开放错误。 jira.unitils.org/browse/UNI-134这看起来像发生在你身上的事情吗? 请显示更大的数据集部分。 嗯,很奇怪。您可能应该添加您正在使用的 dbunit 版本,但这看起来像一个错误。我会将其发布到 dbunit-user 邮件列表,并可能会打开一个问题 (sourceforge.net/tracker/?group_id=47439&atid=449491) 我使用的是 2.4.2,但 2.4.7 给出了相同的结果 【参考方案1】:

您不是想将 ID 已设置的数据库客户端放入数据库吗? ID 列是只读的,只有数据库可以“写入”它。

【讨论】:

可能,但是如果我从 testData.xml 中删除“ID”部分,我会在下一个字段中得到相同的错误,即“address1”。是否有可能所有字段都是只读的?【参考方案2】:

在向我的一个实体添加一列(使用内存中的 HSQL 数据库)后,我也遇到了这个问题。

我设法通过简单地删除之前生成的临时文件来解决这个问题:mem:testdb.log、mem:testdb.properties 和 mem:testdb.script

为什么会出现这个错误? => 数据库模式存储在 mem:testdb.script 文件中,并且在修改实体时不会重新生成。

【讨论】:

【参考方案3】:

我已通过将上述列添加到我的实体来修复错误。

【讨论】:

这也为我解决了问题。【参考方案4】:

我遇到了同样的错误,幸运的是我们之前编写了一些其他测试,发现在大多数教程中,xml 的编写方式是针对 FlatXMLDataSet 如果您使用的是 XML 数据集,那么正确的版本是如欲了解更多信息,请查看底部的链接。

它应该是以下格式。

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
    <table>
        <column>id</column>
        <column>name</column>
        <column>department</column>
        <column>startDate</column>
        <column>endDate</column>
        <row>
            <value>999</value>
            <value>TEMP</value>
            <value>TEMP DEPT</value>
            <value>2113-10-13</value>
            <value>2123-10-13</value>
        </row>
    </table>
</dataset>

欲了解更多信息,请访问此链接。

http://dbunit.sourceforge.net/components.html#FlatXmlDataSet

我又一次在另一个项目中遇到这个错误,我们有一个模型类的层次结构,一些休眠模式过去如何创建一个具有 7 列的表角色,但是在使用 DBUnit 运行它时,它无法创建列(只有 5已创建)因此抛出此错误,解决方案:手动创建此表和另外 3 个不是由休眠创建的关系表。

【讨论】:

【参考方案5】:

如果你将 format = flat 设置为 mysql 和 hsql,这个错误就会消失

【讨论】:

以上是关于数据库单元;混淆表/列名区分大小写的主要内容,如果未能解决你的问题,请参考以下文章

mysql中数据库名字分大小写吗?

mysql建表时强制区分大小写怎么写?

如何查看mysql表名字段是不是区分大小写

linux mysql不区分表名大小写配置

mysql表名怎么配置不区分大小写?

MYSQL数据库建表注意事项