- 締切済み
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のパラメータとして、カラムインデックス(数値)も 指定できるので、それで行うと取得可能でした。 カラムインデックス指定ですと、プログラムのメンテナンス上支障をきたす ので、なんとか、カラム名の指定で行いたいと思っておりますが、 どうすればいいのでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- ngsvx
- ベストアンサー率49% (157/315)
回答ではありませんが・・・。 目的のフィールドがどんな名前で管理されているかを 調べてみたらどうでしょうか? 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); } で大丈夫だと思います(動作未確認)。
- junijuni
- ベストアンサー率25% (12/48)
的外れだったらごめんなさい。 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"); とそれぞれ取得できると思うのですが…。
お礼
やはり、カラム別名をつけるか、カラム番号しかなさそうですね。ありがとうございました。
補足
決して的外れではありません。そうですね。質問するときに書き忘れたのですが、 カラム数が多いんですよ。全カラムをソースコードに書くのがいやだったので、 *にしてしまったわけです。確かに別名をひとカラムづつ付ければいいですね。 最悪、この方法か、インデックスでいきます。ありがとうございます。
お礼
やはり、カラム別名をつけるか、カラム番号しかなさそうですね。ありがとうございました。
補足
いや~。勉強になりました。ありがとうございます。 しかし、残念ながら、getColumnNameでカラム名を取得したのですが、同一名称でした。