• 締切済み

javaにてデータ取得

JAVAカテゴリーで質問しようかこちらにしようか迷ったのですが。。。 あるテーブルを以下の様に内部結合しています。 select * from t_table a, t_table b where a.id=b.id and a.no=0 and b.no=1 この時、t_tableのあるカラムtestcolを取得したいとおもっております。 言語はjavaで、データベースはpostgreSQLです。 rs.getString("testcol"); rsはResultSetオブジェクトです。 これで、データは取得できるのですが、条件のt_tableの別名aのデータ が取得されます。別名bの方を取得したいと思い、単純に rs.getString("b.testcol"); 等としたら、「カラム名がありません」というエラーになりました。 getStringのパラメータとして、カラムインデックス(数値)も 指定できるので、それで行うと取得可能でした。 カラムインデックス指定ですと、プログラムのメンテナンス上支障をきたす ので、なんとか、カラム名の指定で行いたいと思っておりますが、 どうすればいいのでしょうか?

みんなの回答

  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.2

回答ではありませんが・・・。 目的のフィールドがどんな名前で管理されているかを 調べてみたらどうでしょうか? ResultsSetMetadata  rsm = rs.getMetaData(); int n = rsm.getColumnCount(); for(int i = 0 ; i < n ; i++){   String  name = rsm.getColumnName(i);   String  value = rs.getObject(i).toString();   System.out.println("(" + i + ")" + name + "=" + value); } で大丈夫だと思います(動作未確認)。

Vargas
質問者

お礼

やはり、カラム別名をつけるか、カラム番号しかなさそうですね。ありがとうございました。

Vargas
質問者

補足

いや~。勉強になりました。ありがとうございます。 しかし、残念ながら、getColumnNameでカラム名を取得したのですが、同一名称でした。

  • junijuni
  • ベストアンサー率25% (12/48)
回答No.1

的外れだったらごめんなさい。 SELECTするときに*は使わないで、 SELECT A.TESTCOL AS A_TESTCOL, B.TESTCOL AS B_TESTCOL FROM T_TABLE A, T_TABLE B WHERE A.ID=B.ID AND A.NO=0 AND B.NO=1 などとすれば rs.getString("A_TESTCOL"); rs.getString("B_TESTCOL"); とそれぞれ取得できると思うのですが…。

Vargas
質問者

お礼

やはり、カラム別名をつけるか、カラム番号しかなさそうですね。ありがとうございました。

Vargas
質問者

補足

決して的外れではありません。そうですね。質問するときに書き忘れたのですが、 カラム数が多いんですよ。全カラムをソースコードに書くのがいやだったので、 *にしてしまったわけです。確かに別名をひとカラムづつ付ければいいですね。 最悪、この方法か、インデックスでいきます。ありがとうございます。

関連するQ&A