JRruby中,Sybase JDBC和DBI - 获取列名称与AS子句问题(JRruby, Sy

2019-08-17 09:46发布

我有我运行使用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)

printf "Number of rows: %d\n", rows.size
printf "Number of columns: %d\n", sth.column_names.size
sth.column_info.each_with_index do |info, i|
   printf "--- Column %d (%s) ---\n", i, info["name"]
end

或者干脆

sth = dbh.execute(stmt)

rows = sth.fetch_all
col_names = sth.column_names
sth.finish
DBI::Utils::TableFormatter.ascii(col_names, rows)

不是所有的名字出来,我将它们用在查询中的“为”条款。 有些是原来的字段名,有些是我指定的名称。

例如,他们将列出这样的:

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

要么

TRANSACTION
TRADE_CURRENCY
settlement_currency

当松鼠SQL客户端测试此列是正确命名,所以这是在DBI或Sybase JDBC驱动程序中的错误? 还是我做错了什么?

任何帮助将不胜感激

Answer 1:

我猜想,这是在DBI的错误,因为JDBC驱动程序已经大概已经经过了检验多年。 您可能要联系DBI人,看看他们是否有一个建议。



Answer 2:

我可以证实它是Sybase的驱动程序。 从使用JTDS(V1.2.5) http://jtds.sourceforge.net/我可以在我的查询正确定义的列名,可以确认,原来的问题没有DBI

如果谁在关注任何人这个不知道我是怎么JTDS在JRuby下使用DBI工作,请看看我的前一个问题 -它也需要一定的时间-并指定URL时使用DBI是有点搞笑

dbi:Jdbc:jtds:sybase://<host>:<port>/<db>

请注意,对于JDBC的大写J

我希望这样可以节省别人很多的时间;-)



Answer 3:

6.0的Sybase JDBC驱动程序有一些“有趣”的行为处理别名。 如果一个别名定义的resultSet.findColumn方法将上表的列名称查找失败。

还有,你可以在连接设置为改变一些这些行为或只是使用JTDS驱动程序的一些属性。

http://manuals.sybase.com/onlinebooks/group-jc/jcg0600e/prjdbc/@Generic__BookTextView/1072;pt=1072;uf=0



文章来源: JRruby, Sybase JDBC and DBI - fetching column name with the AS clause issue