小编典典

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

sql

我尝试使用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;
合力列名SquirrelSQLcolumn1 - column2
合力列DBExpert名称alias1 - column2

尝试在别名名称周围添加“和”,但也无法正常工作。

有人有主意吗?

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

编辑2:问题已解决!

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

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


阅读 410

收藏
2021-04-15

共1个答案

小编典典

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

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

显然,Squirrel默认使用的非JDBC兼容选项columnName,而不是columnLabel。正如您已经发现的:有一个选项可以使用它来columnLabel代替它。您拥有的另一个选择是使用Jaybird2.2.1或更高版本并添加connection属性columnLabelForName=true

2021-04-15