gpt4 book ai didi

java - 使用 UNION (Jaybird) 时,GetColumName(i) 返回 ""

转载 作者:行者123 更新时间:2023-11-30 10:58:48 26 4
gpt4 key购买 nike

我对使用联合的新 SQL 查询有点困惑。

我使用 jaybird 2.2.8 在 java 应用程序中请求我的 firebird 数据库。通常我使用 MetaData 解析我的结果集

ResultSetMetaData metaData = resultSet.getMetaData();

并循环遍历列

for (int i = 1; i <= metaData.getColumnCount(); i++) {
columnName = metaData.getColumnName(i);
int columnType = metaData.getColumnType(i);
switch (columnType) { ...

在我开始在我的 SQL 查询中使用 Union 之前,它一直运行良好。现在的方法

metaData.getColumnName(i)

返回空字符串而不是列名 - 列类型有效。

当我使用没有 Union 的 SQL 查询时,一切都按预期工作,当我在 IBExpert 中测试我的查询时,所有列都有一个有效名称。

知道哪里出了问题吗?有人有解决方法吗?

顺便说一句。结果集在 eclipse 调试器中看起来非常好

最佳答案

您需要使用 getColumnLabel 而不是 getColumnName .只有当值保证来自单个表中的单个列时,列名才有值,而在 UNION 中则不是这种情况。在 UNION 的情况下,Firebird 仅将第一个选择中的列名称(或别名,如果指定)处理为别名(标签);它不会将列名保留为可由 getColumnName 返回的列名。

如果您确实需要使用 getColumnName(例如出于兼容性原因),那么您可以使用 Jaybird 连接属性 columnLabelForName=true,但不鼓励这样做,因为它是不符合 JDBC。在几乎所有情况下,您都应该改用 getColumnLabel

列名和列标签之间的区别很微妙,在旧的 JDBC 规范中并不是很清楚。列名基本上是原始表中列的名称,而列标签是结果集中列的“名称”(或更准确地说:标签)。标签是用 AS 指定的别名,或者 - 如果没有指定别名 - 由 getColumnName 返回的原始列名。

另见:

披露:我是 Jaybird 开发者之一

关于java - 使用 UNION (Jaybird) 时,GetColumName(i) 返回 "",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32113818/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com