JRruby, Sybase JDBC и DBI - выбор имени столбца с проблемой предложения AS - PullRequest
0 голосов
/ 07 октября 2009

У меня есть скрипт 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)

Not ALL имена появляются, когда я их устанавливаю с помощью предложения as в предложении. Некоторые из них являются исходными именами полей, а некоторые являются именами, которые я указал.

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

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

или

TRANSACTION
TRADE_CURRENCY
settlement_currency

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

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

Ответы [ 3 ]

0 голосов
/ 18 января 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

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

0 голосов
/ 03 июня 2010

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

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

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

0 голосов
/ 13 октября 2009

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

...