JRruby、Sybase JDBC和DBI—获取带有AS子句的列名问题

JRruby、Sybase JDBC和DBI—获取带有AS子句的列名问题,jdbc,sybase,jruby,dbi,Jdbc,Sybase,Jruby,Dbi,我有一个使用JRuby解释器运行的ruby脚本。 该脚本使用DBI、Sybase JDBC jTDS3.jar和jconn3.jar连接到Sybase数据库 我的问题是我有一个select查询,它改变了表的列名。 例如: SELECT t.TRANSACTION as 'business_transaction', t.TRADE_CURRENCY as 'currency', t.CURRENCY as 'settlement_currency' ...etc... FROM TRADE

我有一个使用JRuby解释器运行的ruby脚本。 该脚本使用DBI、Sybase JDBC jTDS3.jar和jconn3.jar连接到Sybase数据库

我的问题是我有一个select查询,它改变了表的列名。 例如:

SELECT
t.TRANSACTION as 'business_transaction',
t.TRADE_CURRENCY as 'currency',
t.CURRENCY as 'settlement_currency'
...etc...

FROM 
TRADE t
...etc...
我的问题是当直接从

或者干脆

sth = dbh.execute(stmt)

rows = sth.fetch_all
col_names = sth.column_names
sth.finish
DBI::Utils::TableFormatter.ascii(col_names, rows)
当我在查询中使用'as'子句设置名称时,并非所有名称都会显示出来。有些是原始字段名,有些是我指定的名称

例如,它们将列出如下内容:

--- Column 0 (TRANSACTION) ---
--- Column 1 (TRADE_CURRENCY) ---
--- Column 2 (settlement_currency) ---

在SquirrelSQL客户机中测试时,列的名称正确,那么这是DBI还是Sybase JDBC驱动程序中的错误?还是我做错了什么


任何帮助都将不胜感激

我想这是DBI中的一个缺陷,因为JDBC驱动程序可能已经被使用多年了。您可能需要联系DBI人员,看看他们是否有建议。

我可以确认是Sybase驱动程序。使用来自的jTDS v1.2.5 我可以在查询中正确定义所有列名,并且可以确认原始问题不是DBI

如果有人想知道我是如何让jtds在jRuby下与DBI一起工作的,请看一看我以前的一个例子——它确实花了一些时间——DBI在指定URL使用时有点滑稽

dbi:Jdbc:jtds:sybase://<host>:<port>/<db>
请注意Jdbc的大写字母J


我希望这能节省很多时间;-

Sybase 6.0 JDBC驱动程序有一些处理别名的有趣行为。如果定义了别名,则resultSet.findColumn方法在查找表列名时将失败

您可以在connect上设置一些属性来更改其中一些行为,或者只使用JTDS驱动程序


很高兴听到你找到了解决办法。只要它不在JRuby中,我也很高兴:
TRANSACTION
TRADE_CURRENCY
settlement_currency
dbi:Jdbc:jtds:sybase://<host>:<port>/<db>