我有一个ruby脚本,我使用JRuby Interpreter运行。 该脚本使用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...
我的问题是直接使用documentation
中的示例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)
不是 ALL 这些名称在我使用查询中的“as”子句设置时出现。有些是原始字段名称,有些是我指定的名称。
例如,他们将列出如下:
--- Column 0 (TRANSACTION) ---
--- Column 1 (TRADE_CURRENCY) ---
--- Column 2 (settlement_currency) ---
或
TRANSACTION
TRADE_CURRENCY
settlement_currency
在Squirrel SQL Client中测试时,列的名称是正确的,这是DBI或Sybase JDBC驱动程序中的错误吗?或者我做错了什么?
非常感谢任何帮助
答案 0 :(得分:0)
我猜这是DBI中的一个错误,因为JDBC驱动程序可能已经通过了工厂多年。您可能想联系DBI人员,看看他们是否有建议。
答案 1 :(得分:0)
我可以确认它是Sybase驱动程序。使用jTDS(v1.2.5) http://jtds.sourceforge.net/我可以在查询中正确定义所有列名,并确认原始问题不是DBI
如果有人关注这个想知道我是如何让jtd在jRuby下使用DBI的,那么请看一下我之前的questions - 它确实需要一些时间 - 而DBI在指定URL时有点好笑使用
dbi:Jdbc:jtds:sybase://<host>:<port>/<db>
请注意Jdbc的大写字母J
我希望这能节省很多时间;-)
答案 2 :(得分:0)
Sybase 6.0 JDBC驱动程序有一些处理别名的“有趣”行为。如果定义了别名,则resultSet.findColumn方法将在表列名称查找时失败。
您可以在连接上设置一些属性来更改其中一些行为或仅使用JTDS驱动程序。