0

JRubyインタープリターを使用して実行するrubyスクリプトがあります。スクリプトは、DBIおよびSybase JDBC(jTDS3.jarおよびjconn3.jar)を使用してSybaseデータベースに接続します。

私の問題は、テーブルの列名を変更するselectクエリがあることです。例えば:

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

また

TRANSACTION
TRADE_CURRENCY
settlement_currency

これをSquirrelSQLClientでテストすると、列の名前が正しくなります。これはDBIまたはSybase JDBCドライバーのバグですか?または私は何か間違ったことをしていますか?

どんな助けでも大歓迎です

4

3 に答える 3

0

JDBCドライバーはおそらく何年にもわたって工場に投入されてきたので、これはDBIのバグだと思います。DBIの人々に連絡して、提案があるかどうかを確認することをお勧めします。

于 2009-10-13T14:57:39.483 に答える
0

Sybaseドライバであることが確認できます。http://jtds.sourceforge.net/のjTDS(v1.2.5)を使用する と、クエリで正しく定義されているすべての列名を取得でき、元の問題がDBIではないことを確認できます。

これをフォローしている人が、jRubyでjtdsをDBIと連携させる方法について疑問に思った場合は、以前の質問の1つを見てください(時間がかかりました)。URLの使用を指定するとき、DBIは少しおかしいです。

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

Jdbcの大文字のJに注意してください

これで誰かが多くの時間を節約できることを願っています;-)

于 2010-01-18T03:59:27.987 に答える
0

Sybase 6.0 JDBCドライバーには、エイリアスを処理する「興味深い」動作がいくつかあります。エイリアスが定義されている場合、resultSet.findColumnメソッドはテーブル列名のルックアップで失敗します。

これらの動作の一部を変更したり、JTDSドライバーを使用したりするために、接続で設定できるプロパティがいくつかあります。

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

于 2010-06-03T11:45:32.223 に答える