- PR -

名前解決による値取得(JDBC)

1
投稿者投稿内容
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2004-03-22 12:09
お世話になっております。

さて、JDBCによる結果取得に
関して下記の問題(疑問)に
あたりました。

ご存知の方いらっしゃらないでしょうか?

----
例)
コード:
SELECT
	a.COL, b.COL
FROM
	A a, B b
WHERE
	a.ID = b.ID



上記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しろ!とか
  他に良い対処法があるのか、はたまた私が
  知らないだけで当たり前の解決法があるのか
せん
ぬし
会議室デビュー日: 2002/03/04
投稿数: 397
投稿日時: 2004-03-22 12:34
前半の質問については、わかりません。

で、

引用:

(株)ぽちさんの書き込み (2004-03-22 12:09) より:
質問のまとめとしては
・このようなケースの場合はどう対処すべきか?



カラムに別名を付けて、それを指定する。
yuzy
大ベテラン
会議室デビュー日: 2002/02/14
投稿数: 117
投稿日時: 2004-03-22 12:36
私なら
SELECT a.COL, b.COL B_COL
FROM A a, B b
WHERE a.ID = b.ID
みたいにカラムの別名を指定します。
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2004-03-22 12:47
せんさん、yuzyさんありがとうございます。

引用:

yuzyさんの書き込み (2004-03-22 12:36) より:
私なら
SELECT a.COL, b.COL B_COL
FROM A a, B b
WHERE a.ID = b.ID
みたいにカラムの別名を指定します。



なるほど、そういう手がありますね。
SQLは疎いもので、パっと案が浮かび
ませんでした。

それで取れるか試してみます。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2004-03-22 13:38
J2SE1.4のJavaDocのResultSetクラスの説明より抜粋

getter メソッドへの入力として使用される列名では、大文字小文字は区別されません。列名で getter メソッドが呼び出され、複数の列が同じ名前を持つ場合は、最初に一致する列の値が返されます。列名のオプションは、結果セットで生成される SQL クエリーで列名が使用される場合に使われるよう設計されています。クエリーで明示的に命名されない列の場合には、列番号を使用するのがもっともよい方法です。列名を使用する場合、実際に目的の列を指すことを保証する方法がプログラマにはありません。

JavaDocに書いてあります。よく読みましょう。
書いてあるだけで、実装はベンダー次第であるので
実際はその通りに動くとは限りませんが。
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2004-03-22 18:32
かつのりさん。
ありがとうございます。

引用:

かつのりさんの書き込み (2004-03-22 13:38) より:
J2SE1.4のJavaDocのResultSetクラスの説明より抜粋

getter メソッドへの入力として使用される列名では、大文字小文字は区別されません。列名で getter メソッドが呼び出され、複数の列が同じ名前を持つ場合は、最初に一致する列の値が返されます。列名のオプションは、結果セットで生成される SQL クエリーで列名が使用される場合に使われるよう設計されています。クエリーで明示的に命名されない列の場合には、列番号を使用するのがもっともよい方法です。列名を使用する場合、実際に目的の列を指すことを保証する方法がプログラマにはありません。

JavaDocに書いてあります。よく読みましょう。
書いてあるだけで、実装はベンダー次第であるので
実際はその通りに動くとは限りませんが。



まさにその通りでございました。
APIDocくらい読め、と自分に言いたいですね。。

ということで
・明確な別名指定を行う

ことで値取得に成功しまた。

皆様アドバイスありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)