2009-10-07 2 views
0

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

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

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) 

Не все имена вышли, как я поставил их используя предложение «as» в запросе. Некоторые из них являются исходными именами полей, а некоторые - именами, которые я указал.

Например, они будут перечислены как:

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

или

TRANSACTION 
TRADE_CURRENCY 
settlement_currency 

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

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

ответ

0

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

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

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

Пожалуйста, обратите внимание на капитал J для JDBC

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

0

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

+0

Я бы не стал ставить на него :-) – Spasm

+0

Рад слышать, что вы нашли исправление. Пока это не было в JRuby, я тоже счастлив :) –

0

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^