Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

Oracleの表から取得した値をカラムにセット、表の値は動的に変化

プログラミング未経験で医療システム開発を行なう会社に入社して、現在1年目のプログラマです。

OracleのテーブルXのAというカラムに入っている値を重複なしで取得して、
その値を列名にセットした表を作る作業をJavaで行なっています。

<やりたいこと>
・XテーブルのAカラムに「1」、「2」、「3」と入っているとき、別表Yテーブルに「1」、「2」、「3」という列を作成する

※Aカラムに入っている値の種類は動的です(1,2だけのときもある。)
※作成したいYテーブルには、既存の固定列もあります。

<できたこと・できないこと>
取得したAカラムの値の数だけテーブルにaddして
列だけは1列追加されました。
Aカラムの値の数が2つでも、列は1列しか増えてくれません。
カラム名がセットできていません。

<環境>
Oracleは8?
Java1.4

足りない情報があればご指摘いただけると幸いです。
お力を貸していただける方いらっしゃいましたら
よろしくお願い致します。

12

回答

85634

閲覧

12件の回答

評価

0

「テーブル」って、どんなクラスなの?
2列目を加えるロジックはちゃんとあるの?
カラム名をセットするロジックはあるの?

ループの部分だけでもソースをあげてみれば?

ところで、そもそも、期待通りの値はとれてるの?

まずはこんなところか。

評価

0

>不良社員さん
ご回答とご指摘ありがとうございます!
返事が遅くなってすみません。

Oracleの表は、以下のようなものです。
A列
----
01
02
03

>「テーブル」って、どんなクラスなの?
JCListTableクラスを継承してます。答えとして合ってますか…

>2列目を加えるロジックはちゃんとあるの?
>カラム名をセットするロジックはあるの?
どこがこれらに該当するロジックか
いまいち理解できていないので、
この部分はもう少し研究してみます!

    public boolean gmtdGetPortNo(){
        String strSQL = "";
        ArrayList listFields = new ArrayList();
        int intRetValue;
        int intIndex = 0;
        int intCount = 0;
        absColumnInfo ColInfo = null;
        
            //カラム数を取得するSQL文
            gstrPortNo = new String[カラム数(int)];
            
            //カラム名を取得するSQL文

            //カラム名を変数(String[]型にセット)
            for (intIndex=0;intIndex<intCount;intIndex++){
                int intRet = mOra.gmtdFetchRows(intRetValue,listFields);
                if(intRet == 成功){
                    gstrPortNo[intIndex] = new String();
                    if(listFields.get(0) != null){
                        gstrPortNo[intIndex] = listFields.get(0).toString();
                    } else {
                        gstrPortNo[intIndex] = "";
                    }
                }
            }                    
    
            //↓のクラスで、ListTableのキー(インデックス)、表示設定、カラム名のデフォルトを設定しています。
            ColInfo = new clsColumn2(mEnum.pmtdGetOracle(),gstrPortNo);            

            
                for(int j=0;j<gstrPortNo.length;j++){
                        ColInfo.gmtdAddColInfo(gstrPortNo[j].toString()(キー),
                                        gstrPortNo.toString()(表示カラム名),
                                        200(幅), (表示を意味する定数));
                        //↓gmtdAddColInfoを確定する関数…
                gmtdSetColInfo(ColInfo);
                
                }
                        
            return true;
            
    
    }

ちなみに、
gstrPortNo[0] 01
gstrPortNo[1] 02
gstrPortNo[2] 03

と値は取れているのですが、セットがされないので困っています。。

全体の流れは、
パネル作成→ListTable(固定値)作成→データ取得→A列取得→カラム再構成(ListTable作り直し)
という流れでやろうとしているのでそれが無茶なのかも。。。

まだお付き合い頂ける方、よろしければご回答お願い致します。

評価

0

>JCListTableクラスを継承

これであってるの?
http://www.grapecity.com/japan/java/P2_356.htm#concept

サポートに問い合わせた方がいいと思うんだが。
高い金払ってるんだからさ。

ほかにできることといったら、小さい表を用意して、
実行途中の変数の値を確認すること。
ふつーのひとならデバッガだろうけど、
俺の場合は、printfデバッグだけどね。

評価

0

ご回答ありがとうございます!

このURLの先にあるDesktopView??と、いうのは…??

カラムを追加するロジック、
よーく探してみたら実装できていませんでした。
空実装してたみたいで・・・
書いたらちょこっと進みました!
というか、変化しました。
あとカラム名もチェックしなきゃ。
今は、カラム名が出て欲しい場所に
なぜか「Java.lang17@なんとか・・・」って
変な文字が出てきています。

自分以外の視点から意見を言ってもらえると
道が開けたりするので助かります。
本当にありがとうございます。

Javaコンソールというものに
変数の値出力しまくってデバッグしてます。
明日もがんばります。

評価

0

>なぜか「Java.lang17@なんとか・・・」って
>変な文字が出てきています。

Stringを入れるつもりが、配列かCollectionでも放りこんでんじゃない?

>このURLの先にあるDesktopView??と、いうのは…??

だから、JCListTableって、どっから持ってきたのよ。
APIがネットに公開されているなら教えてくれ。
自前で用意したクラスだってんなら、
こんなところで名前だけ持ち出されても意味無いよ。

とにかく。printfデバッグは、未来永劫に渡って
最強のデバッグ方法だ。身につけておいて損はない。
効率は腕次第だし。
かかるコストも最強だけどな。

評価

0

>Stringを入れるつもりが、配列かCollectionでも放りこんでんじゃない?
そうみたいです。。。まだ直せてないですが、
「01」「02」というような正しいカラムも出るようになりました!
カラム名を追加するロジックを実装したら
効果大でした。ありがとうございます。
でも上の変な文字と両方出ちゃってるので、
どこかで余計なことをしているみたいです。
あと少し。

>だから、JCListTableって、どっから持ってきたのよ。
>APIがネットに公開されているなら教えてくれ。
あ、すみません!そうですよね。
サンマイクロソフト社の「Java2Platform Std.Ed.v1.4.2」って頁には載ってないんですが
public class com.klg.jclass.table.JCListTable extends com.klg.jclass.table.JCTable{
   public static final int SELECT_ROW = 0;
   public static final int SELECT_COLUMN = 1;
   protected int selection_type;
   public JCListTable();
   public int getSelectionType();
   public void setSelectionTYpe(int 引数0);
}
↑こんなクラスです。
下のURLは、見つけてみたものの6.4.1って書いてありますね…うーん。
http://jclass.inside.quest.com/themes/jclass/api/dv641/com/klg/jclass/table/JCListTable.html

printfデバッグ、便利なデバッグ法ですよね。
私ももっと上手に使えるといいんですが。

評価

0

apiが何か理解しているのかとても不安なのですが。
購入しないと利用できないので、
何もお答えしようがありません。

extends com.klg.jclass.table.JCTable
この時点で結構無理です。

javaのapiではありますので、
憶測での回答は出来るかもしれませんが、
回答できるのは
「JClass DesktopViews」利用者
に限られますよ。

評価

0

まず、流れを考えること。データがどうなれば正解か。
しかる後に要所要所でprintを挟んで(条件分岐とか)、いったいどこの段階で、自分の想定とズレているのか確認する。
そしてなぜズレるのか推測、検証する。

アドバイスをもらったら、それで少しずつ自分で進めていける力は持ってるのだから、焦らず1つ1つ確認していきましょう。

評価

0

向かってる方向は間違ってない。がんばってください。
書いたコードがそのまま一発で動くような、雲の上のお方ならともかく、
凡人は、効率の差はあれど、似たような方法でコードを書いてるもんです。

1度でも、自分の書いたプログラムが何をしているのか、
隅から隅まで自分の目で確かめてみるのは、いい経験になると思うぞ。

評価

0

それと。
ベンダーのサポートが使えるのかどうか、確認した方がいいよ。
高いお金払ってるんだろうし。

評価

0

・コロさん
ありがとうございます!
APIが何か、正直答えられません。
調べて勉強してみます。
>「JClass DesktopViews」利用者
>に限られますよ。
そうなんですね、わかりました。
回答できる人が限られてしまうような質問のために
掲示板を使ってしまって申し訳ないです。。

・$さん
ありがとうございます!
なんとなくできた、で作業が進んできてしまったので
肝心なことを忘れていました。
ちゃんと論理立てて考えないとですね…
流れ考えて推測→検証がんばります。

評価

0

・不良社員さん
何度もありがとうございました!
がんばります。
>1度でも、自分の書いたプログラムが何をしているのか、
>隅から隅まで自分の目で確かめてみるのは、いい経験になると思うぞ。
ホントそう思います。力がつくことを願ってがんばります。

>ベンダーのサポートが使えるのかどうか、確認した方がいいよ。
そうですね、ちょっと周りの人とかにも聞いてみます!
ありがとうございました!

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。