首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GetColumName(i)在使用UNION时返回"“(Jaybird)

GetColumName(i)在使用UNION时返回"“(Jaybird)
EN

Stack Overflow用户
提问于 2015-08-20 08:55:38
回答 1查看 190关注 0票数 2

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

我使用jaybird 2.2.8在java应用程序中请求我的firebird db。通常,我使用MetaData解析我的MetaData

代码语言:javascript
复制
ResultSetMetaData metaData = resultSet.getMetaData();

在柱子上绕圈

代码语言:javascript
复制
for (int i = 1; i <= metaData.getColumnCount(); i++) {
            columnName = metaData.getColumnName(i);
            int columnType = metaData.getColumnType(i);
            switch (columnType) { ...

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

代码语言:javascript
复制
metaData.getColumnName(i)

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

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

你知道怎么回事吗?有人有办法解决吗?

顺便说一句。在eclipse调试器中,ResultSet看起来很不错。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-20 11:47:02

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

如果您确实需要使用getColumnName (例如由于兼容性原因),那么您可以使用Jaybird连接属性columnLabelForName=true,但这是不允许的,因为它与JDBC不兼容。在几乎所有的情况下,您都应该使用getColumnLabel

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

另请参阅:

披露:我是Jaybird开发者之一

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32113818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档