JRruby, Sybase JDBC и DBI — получение имени столбца с ошибкой предложения AS

У меня есть скрипт ruby, который я запускаю с помощью интерпретатора JRuby. Сценарий подключается к базе данных Sybase с помощью DBI и Sybase JDBC (jTDS3.jar и jconn3.jar).

Моя проблема в том, что у меня есть запрос на выборку, который изменяет имена столбцов таблицы. Например:

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) ---

or

TRANSACTION
TRADE_CURRENCY
settlement_currency

При тестировании этого в Squirrel SQL Client столбцы названы правильно, так что это ошибка в DBI или драйверах Sybase JDBC? или я что-то не так делаю?

Любая помощь будет принята с благодарностью


person Spasm    schedule 07.10.2009    source источник


Ответы (3)


Я предполагаю, что это ошибка в DBI, поскольку драйверы JDBC, по-видимому, годами подвергались испытаниям. Вы можете связаться с людьми из DBI, чтобы узнать, есть ли у них предложение.

person Charles Oliver Nutter    schedule 13.10.2009
comment
Рад слышать, что вы нашли исправление. Пока это не было в JRuby, я тоже счастлив :) - person Charles Oliver Nutter; 10.03.2010

Я могу подтвердить, что это драйверы Sybase. Используя jTDS (v1.2.5) из http://jtds.sourceforge.net/, я могу получить все имена столбцов правильно определены в моем запросе и могут подтвердить, что исходная проблема НЕ DBI

Если кто-то, кто следит за этим, задавался вопросом, как я заставил jtds работать с DBI под jRuby, взгляните на один из моих бывших вопросы - это заняло некоторое время - и DBI немного забавен при указании использования URL

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

Обратите внимание на заглавную букву J для Jdbc.

Надеюсь, это сэкономит кому-то много времени ;-)

person Spasm    schedule 18.01.2010

Драйверы Sybase 6.0 JDBC имеют "интересное" поведение при работе с псевдонимами. Метод resultSet.findColumn завершится ошибкой при поиске имени столбца таблицы, если определен псевдоним.

Есть некоторые свойства, которые вы можете установить в соединении, чтобы изменить некоторые из этих поведений или просто использовать драйверы JTDS.

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

person KaizenSoze    schedule 03.06.2010