SELECT语句中的列别名不适用于SQuirrel SQL + Firebird

时间:2012-10-03 13:43:06

标签: sql jdbc firebird squirrel-sql jaybird

我尝试使用SQuirrel SQL 3.4 + Firebird 1.5 +驱动程序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 个答案:

答案 0 :(得分:18)

问题是由于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默认使用columnName的非JDBC兼容选项,而不是columnLabel。正如您已经发现的那样:有一个选项可以让它使用columnLabel代替。您拥有的另一个选项是使用Jaybird 2.2.1或更高版本并添加连接属性columnLabelForName=true

答案 1 :(得分:7)

在Squirrel中,需要设置:

  

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