28

我尝试使用 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

享受。

4

2 回答 2

21

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

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

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

于 2012-10-04T09:27:43.447 回答
12

在 Squirrel 中,这需要设置:

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

于 2016-03-02T19:50:04.330 回答