【问题标题】:JRruby, Sybase JDBC and DBI - fetching column name with the AS clause issueJRruby、Sybase JDBC 和 DBI - 使用 AS 子句问题获取列名
【发布时间】:2010-12-04 13:24:46
【问题描述】:

我有一个使用 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...

我的问题是直接使用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 驱动程序中的错误吗?还是我做错了什么?

任何帮助将不胜感激

【问题讨论】:

    标签: jdbc sybase jruby dbi


    【解决方案1】:

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

    【讨论】:

    • 很高兴听到您找到了解决方法。只要它不在 JRuby 中,我也很高兴 :)
    【解决方案2】:

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

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

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

    请注意 Jdbc 的大写 J

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-18
        • 2011-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多