【问题标题】:Column aliasing in SELECT statements doesn't work with SQuirrel SQL + FirebirdSELECT 语句中的列别名不适用于 SQuirrel SQL + Firebird
【发布时间】:2012-09-24 11:00:59
【问题描述】:

我尝试使用 SQuirrel SQL 3.4 + Firebird 1.5 + Driver JDBC Jaybird 2.2.[0|1] (JVM 1.7.0_03) 在 SELECT 语句中添加列别名,但不起作用。别名列显示为列的原始名称。在另一个工具 (DBExpert) 中,同样的语句可以正常工作。

声明SELECT column1 AS alias1, column2 FROM table;
SquirrelSQL 中的结果列名称column1 - column2
DBExpert 中的结果列名称alias1 - column2

尝试在别名周围添加 ' 和 ",但也不起作用。

有人有想法吗?

编辑:我将 JDBC Jaybird 驱动程序更新到 2.2.1 版本(9 月 30 日发布),问题仍然存在。

编辑 2:问题已解决!

问题是由 Squirrel SQL 的默认首选项引起的。

要修复它,请转到“文件”->“全局首选项”,在“数据类型控件”选项卡中找到“常规(适用于所有类型)”并标记组合框“使用列标签而不是列名在结果标题中”。

见截图:http://i1-win.softpedia-static.com/screenshots/SQuirrel-SQL-Client_4.png?1345342622

享受吧。

【问题讨论】:

  • 问题已修复。请参阅问题“编辑 2”。

标签: sql jdbc firebird squirrel-sql jaybird


【解决方案1】:

在 Squirrel 中,需要在以下位置进行设置:

文件 > 全局首选项 > 数据类型控件 > 检查:使用列标签 而不是结果标题中的列名

【讨论】:

  • 这对我有用!
【解决方案2】:

问题是由于 JDBC 规范中的混淆(至少从历史上看)以及 Jaybird 在结果集元数据中报告为 columnNames 和 columnLabels 的内容方面发生了变化。据我所知,在 JDBC 2.0 和更早版本中,columnName 和 columnLabel 之间的区别没有明确定义,因此在几乎所有情况下,getColumnName() 返回的值都与getColumnLabel() 相同(即,如果指定了 AS 别名)。

使用 JDBC 3.0 进行了更清晰的区分:columnName 是表中基础列的名称(如果有),columnLabel 是 AS 别名(如果指定),否则 columnName . Jaybird 2.1.6 及更早版本过去常常为 getColumnLabel()getColumnName()(即 columnLabel)返回相同的值,这在 Jaybird 2.2 中已更改。

显然 Squirrel 默认使用不符合 JDBC 的选项 columnName,而不是 columnLabel。正如您已经发现的那样:有一个选项可以让它使用columnLabel。另一个选择是使用 Jaybird 2.2.1 或更高版本并添加连接属性 columnLabelForName=true

【讨论】:

  • 你的解释很有启发性。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多