• 締切済み

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のパラメータとして、カラムインデックス(数値)も 指定できるので、それで行うと取得可能でした。 カラムインデックス指定ですと、プログラムのメンテナンス上支障をきたす ので、なんとか、カラム名の指定で行いたいと思っておりますが、 どうすればいいのでしょうか?

  • Vargas
  • お礼率85% (174/204)

みんなの回答

  • 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

  • javaのResultSetについて

    javaのResultSetについてですが、getStringでSQL名を選択して取得するのですが、変数で指定した場合は、文字列と判断され取得できないのでしょうか? 例えばSQLの列名の「test」を取得したい場合は、「rs.getString(test)」と記述しますが、 以下のように変数に置き換えて、取得しようすると、 String test2 = "test"; rs.getString(test2)というようにすると、カラムがありませんとエラーが返ってきます。 変数に置き換えて実行したいのですが、何か良い方法がないかご教授いただけますでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • データの取得方法

    Aテーブル{ id char(3) not null, name varchar(10), a_no char(5), b_no char(5), c_no char(5), date timestamp } Bマスタ{ no char(5), name char(10) } 上記のようなDBがあるのですがAテーブルのa_no、b_no、c_noに入るのはBマスタのnoになります。 下記のようにデータを取得したい場合、どうすればうまく取得できるのでしょうか。 A.id, A.name, A.a_no, カラム名をname1としてB.name, b_no, カラム名をname2としてB.name, c_no, カラム名をname3としてB.name そんなに難しいことではないと思うのですが、考えれば考えるだけ頭の中でこんがらがってきて困っています。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 複数テーブルのMAX値の行データを取得したい

    テーブルA、B、Cとも共通して以下のカラムを持っています。 SAGYO_NO (VARCHAR) SAGYO_DT(DATE型) TANTO (VARCHAR) NAIYO(VARCHAR) SAGYO_NOを指定したA、B、Cのうちで(WHERE SAGYO_NO = '01')、 SAGYO_DTが最新のものの、 SAGYO_DT、TANTO、NAIYOを一回のSQLで取得したいのですが、 うまくできなくて困っています。 いい案がありましたらお願いします。 (例) テーブルA 01 2011/03/01 AAA BBB 01 2011/03/08 CCC DDD テーブルB 01 2011/03/05 EEE FFF テーブルC 01 2011/03/02 GGG HHH ⇒上記の場合、テーブルAの'2011/03/08','CCC','DDD'を取得したいです。 よろしくお願いいたします。

  • テーブル名をカラムとして取得する方法

    テーブル名をカラムとして取得する方法はありますでしょうか? オラクル8とVB6でプログラムを組んでいます。 例 TABLE Aの内容 カラム1 1 2 3 TABLE B カラム1の内容 4 5 6 SQLは簡略化してかきます。下記のSQLを実行した場合、 select A.カラム1 from A union select b.カラム1 from b 1 2 3 4 5 6 を取得できます。 例えば、上記で、SQL実行後、 下記のような値を取得したいです。 1 ,Aのテーブルだよ 2 ,Aのテーブルだよ 3 ,Aのテーブルだよ 4 ,Bのテーブルだよ 5 ,Bのテーブルだよ 6 ,Bのテーブルだよ それぞれのテーブルの名前を別名で結果に格納したいのです。 何か方法はありますでしょうか? なければ、unionせずに、2回SQLを発行し、それぞれに、 プログラム上で、「Aのテーブルだよ」を後で挿入したいと思っています。

  • SQLServer T-SQL テーブルのJOIN

    こんにちは。 テーブル"TABLE_A"、"TABLE_B"があり、 各々のテーブルにカラム"COL"があります。 カラム"COL"にインデックスを作成しています。 テーブル"TABLE_A"、"TABLE_B"をカラム"COL"で結合 する際の演算子にLIKE文を用いています。"TABLE_B"の カラム"COL"に"%"を付加していますが、これが原因で "COL"のインデックスが効きません。どのようにすれば LIKE検索でインデックスを有効にすることができるの でしょうか? SELECT * FROM TABLE_A INNER JOIN TABLE_B ON TABLE_A.COL LIKE TABLE_B.COL+'%'

  • 複数テーブルからデータを取り、updateする

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=1211685 にも同じような質問があったのですが、同様の処理でうまくupdateされません。分かる方がいらっしゃいましたら教えてください。 今、テーブルが2つ(table1、table2)があり、それぞれ2つのカラム(column1、column2)を持っています。ここで、それぞれのカラム2が等しく、カラム1が指定した値のレコードのみ値をupdateしたいです。 update table1 set column1 = 'AAA' from table1,table2 where table1.column2 = table2.column2 and table1.column1 = 'BBB' and table2.column1 = 'CCC' としたところ、「from table1,table2 where 」の辺りに間違いがあると表示されます。 上の例とどう違うのか分かりません。 よろしくお願いします。m(__)m

  • お世話になってます。

    お世話になってます。 SQL初心者です。 現在、ORACLEでSQLを作成しているのですが、「ORA-00920」と「ORA-02063」が 発生し困っています。 「ORA-02063」の原因は調べてみると「ORA-00920」が原因の可能性があるみたいです。 「ORA-00920」のメッセージには「関係演算子が無効です。」とありますが、 調べてみてもよくわかりません。 実行するSQLは以下のような感じです。 ■SQL文 with テーブルA as( SELECT文   取得カラムA, 取得カラムB, 取得カラムC ), テーブルB as(   取得カラムA, 取得カラムB, 取得カラムC ) SELECT * FROM テーブルA A_TABLE, テーブルB B_TABLE WHERE A_TABLE.取得カラムA = B_TABLE.取得カラムA (+) AND A_TABLE.取得カラムB = B_TABLE.取得カラムB (+) AND A_TABLE.取得カラムC = B_TABLE.取得カラムC (+) ***ココマデ*** ビューの作成はうまくいっているのですが、 テーブルAとテーブルBを使用したSQL文でエラーになっているようです。

  • 複数テーブルから全データ取得する際、同カラムあり

    SELECTで複数テーブルから、全カラム値を取得する際、同名カラムがあったとき、指定テーブルの値を取得したいのですが、どうすれば良いでしょうか? ◆前提 ・テーブル「r1」 ・テーブル「t1」 ・テーブル「u1」 ※「r1」「u1」には、同名カラム「z2」あり ◆やりたいこと ・条件一致する全てのデータを取得したい ・但し、「z2」カラムの値は、「r1」テーブルの値を取得したい ◆現状 $sql="SELECT * FROM (`r1`) JOIN `t1` JOIN `u1` ON `r1`.`tid` = `t1`.`tid` And`r1`.`uid` = `u1`.`uid`"; ◆疑問 3つのテーブルから条件一致するデータを全て取得しているのですが、 「r1テーブル」「u1テーブル」に同じカラム名(z2)があるためか、 取得結果のz2内容が、「u1テーブル」の「z2カラム」値となっています(多分…)。 この時、「r1テーブル」の「z2カラム」を取得するには、どうすれば良いでしょうか? (「r1テーブル」の「z2カラム」だけを単独で取得したいわけではなく、「SELECT * 」結果した際の「z2カラム」の値を「r1テーブル」のものにしたいです)

    • ベストアンサー
    • MySQL
  • 1つのテーブルからのデータ取得

    お世話になります。 Table1にはA,Bのフィールドがあり 例えば A=01のレコードを取得(取得するフィールドはA,B) このレコードを(1)とする。 Table1のうち、Aが(1)のBと一致する レコードを(2)とする。 Table1のうち、Aが(2)のBと一致する レコードを(3)とする。 N番目のBと一致するTable1のAがなくなるまで 上記を繰り返す。 (1),(2),(3)・・・の A,Bの値を取得するためには どういうSQL文を書けばいいでしょうか? 例:ここでA=01を設定する テーブル例と結果 Table1 A: B 01:02 取得 02:04 取得 02:05 取得 03:04 X 04:06 取得 05:10 取得 07:11 X 10:15 取得 以上お教えください。よろしくお願いします。

  • カラム情報(主キー、データ型、桁数等)を取得するには

    テーブルに格納されているカラム情報(カラム名、主キー、データ型、データの桁数)を取得したいと考えています。 主キー情報とそれに付随するカラム情報は現在下記のSQL文で取得しています。 SELECT C.TABLE_NAME , COL.COLUMN_NAME, C.CONSTRAINT_TYPE, COL2.DATA_TYPE, COL2.DATA_LENGTH FROM USER_CONSTRAINTS C, USER_CONS_COLUMNS COL, USER_TAB_COLUMNS COL2 WHERE C.TABLE_NAME = COL.TABLE_NAME AND C.CONSTRAINT_NAME = COL.CONSTRAINT_NAME AND C.TABLE_NAME = COL2.TABLE_NAME AND COL.COLUMN_NAME = COL2.COLUMN_NAME AND C.CONSTRAINT_TYPE = 'P' AND UPPER(C.TABLE_NAME) = UPPER('テーブル名') ORDER BY C.TABLE_NAME, COL.POSITION ここで、主キー以外のカラムに対しても同様にカラム情報を取得したいのですが、どのように取得すればよろしいでしょうか? ※カラム名、主キー有無、データ型、桁数 でカラム情報を取得できれば最も良いのですが、 主キー情報を除いた全体のカラム情報を取得する事ができれば、こちらの情報でも助かります 宜しくお願い致します。