0

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

我的问题是我有一个选择查询来改变表的列名。例如:

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)

当我在查询中使用“as”子句设置它们时,并不是所有的名称都会出现。有些是原始字段名称,有些是我指定的名称。

例如,他们将列出如下:

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

或者

TRANSACTION
TRADE_CURRENCY
settlement_currency

在 Squirrel SQL Client 中测试时,列被正确命名,这是 DBI 或 Sybase JDBC 驱动程序中的错误吗?还是我做错了什么?

任何帮助将不胜感激

4

3 回答 3

0

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

于 2009-10-13T14:57:39.483 回答
0

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

如果有人想知道我是如何让 jtds 在 jRuby 下与 DBI 一起工作的,请看一下我以前的一个问题- 这确实需要一些时间 - 在指定 URL 使用时 DBI 有点有趣

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

请注意 Jdbc 的大写 J

我希望这可以节省很多时间;-)

于 2010-01-18T03:59:27.987 回答
0

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

您可以在连接上设置一些属性以更改其中一些行为或仅使用 JTDS 驱动程序。

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

于 2010-06-03T11:45:32.223 回答