- - PR -
名前解決による値取得(JDBC)
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-03-22 12:09
お世話になっております。
さて、JDBCによる結果取得に 関して下記の問題(疑問)に あたりました。 ご存知の方いらっしゃらないでしょうか? ---- 例)
上記SQLを発行した状態で、JDBCからResultSet を取得します。その際以下の値の取り方だと 取得するのはどちらになるのでしょうか? String val = rs.get( "COL" ); SQL的にはa.COL, b.COL双方取れると思いますが JDBCではrs.get( "a.COL" )では取得できませんでした。 名前解決になるので、なんとなく"COL"の値は上書き されて、a,bどちらかの値がrs.get( "COL" )で取れる ようなのですが、この辺の動きをご存知の方は いらっしゃらないでしょうか? 質問のまとめとしては ・このようなケースの場合はどう対処すべきか? →index指定でrsからgetしろ!とか 他に良い対処法があるのか、はたまた私が 知らないだけで当たり前の解決法があるのか | ||||
|
投稿日時: 2004-03-22 12:34
前半の質問については、わかりません。
で、
カラムに別名を付けて、それを指定する。 | ||||
|
投稿日時: 2004-03-22 12:36
私なら
SELECT a.COL, b.COL B_COL FROM A a, B b WHERE a.ID = b.ID みたいにカラムの別名を指定します。 | ||||
|
投稿日時: 2004-03-22 12:47
せんさん、yuzyさんありがとうございます。
なるほど、そういう手がありますね。 SQLは疎いもので、パっと案が浮かび ませんでした。 それで取れるか試してみます。 | ||||
|
投稿日時: 2004-03-22 13:38
J2SE1.4のJavaDocのResultSetクラスの説明より抜粋
getter メソッドへの入力として使用される列名では、大文字小文字は区別されません。列名で getter メソッドが呼び出され、複数の列が同じ名前を持つ場合は、最初に一致する列の値が返されます。列名のオプションは、結果セットで生成される SQL クエリーで列名が使用される場合に使われるよう設計されています。クエリーで明示的に命名されない列の場合には、列番号を使用するのがもっともよい方法です。列名を使用する場合、実際に目的の列を指すことを保証する方法がプログラマにはありません。 JavaDocに書いてあります。よく読みましょう。 書いてあるだけで、実装はベンダー次第であるので 実際はその通りに動くとは限りませんが。 | ||||
|
投稿日時: 2004-03-22 18:32
かつのりさん。
ありがとうございます。
まさにその通りでございました。 APIDocくらい読め、と自分に言いたいですね。。 ということで ・明確な別名指定を行う ことで値取得に成功しまた。 皆様アドバイスありがとうございました。 | ||||
1
