- ベストアンサー
Oracle 8i に入っている値が、おかしい(指定した値ではない)
お世話になります。 現在、Oracle8i を使っています。会社で、社員情報メンテナンス表を作っているんです。社員番号を主キーとして扱っています。 そのテーブルを Java を使って扱っているんですが、この社員番号を検索して、帰ってくる値が、登録(INSERT 文) の時の値と違います。全く違うんではなく、見た目は一緒ですけど、コンピュータで扱うと違うという返事が返ってきます。 具体的にいうと、1 で登録した番号を、SELECT 文で返ってきた値を Java で 1 と同じか?と聞いてみると、違うとコンピュータが返します。僕のプログラムがおかしいのか?と思い、家に返って ほかのDB を使って、試したところちゃんとできました。 Java のプログラムを使って、DB からかえってきた値をコンソール画面に表示したら、ちゃんと「 1 」と表示されます。しかし、その値が、「 1 」と等しいか? Javaで調べるプログラムを作ってみると、違うという答えが返ってきます。 誰かわかる方は、ご返事ください。よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>型は、問題ないと思います。char 型でやっております。 (varchar2でなくて) char ということは固定長文字列ですよね? 固定長の場合、スペース埋めされますが、それは考慮されてます? 例えば、char(3)の列に、"1"を代入すると、データベース内部では 後ろに2つのスペースが埋められ "1__"(_はスペース)という形で 保存されます。 それを取り出して元の変数と比較すると "1" と"1__"の比較なので当然等しくはならないはずですが…。
その他の回答 (4)
- yuji
- ベストアンサー率37% (64/169)
"1" と等しいか? の部分ですが、まさか if (data == "1") { } なんてやってないですよね。 JavaのString型だとしたら、 if (data.equals("1")) { } と書きます。 これは Java の基本中の基本です。
お礼
ご返事ありがとうございます。 ご指摘のような方法では、やっていません。 ちゃんとした方法で、やっています。 しかし、他の方法で、プログラムするやり方を見つけ、一応問題は解決しました。どうもありがとうございます。 家の postgreSQL では、ちゃんと動いたんですが。なんでなんでしょう?オラクル接続は、少し複雑ですね。 どうもありがとうございます。またの機会によろしくお願いします。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
JavaにSingleやDoubleはないですね。VBと混ざりました。 floatとdoubleですね。
お礼
どうもご返事ありがとうございます。 そのあたりは、しっかりとやっています。 どうも、会社のパソコンの調子がおかしいような気がするんですが。 処理をしていても、飛んでしまう箇所があるので。 2度のご回答どうもありがとうございます。では、またの機会に。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
フィールドの値を、SingleやDoubleの変数に入れて、それを1と同じかという判定をしていませんか? 浮動小数は丸め誤差が発生するのでイコールで比較すると一致しない場合があります。
- me_no_car
- ベストアンサー率24% (22/90)
型は大丈夫ですか?
お礼
ご回答どうもありがとうございます。 型は、問題ないと思います。char 型でやっております。 問題は、まだ解決していないのですが、少々遠回りをしたプログラムを作り、なんとかやっております。 どうもありがとうございました。
お礼
どうもありがとうございます。 そうなんですか!じゃ、それが問題だったんですね。 char 型の場合、空白部分がスペースで埋め尽くされるなんてことは、思いもよりませんでした。 すみませんでした。単純な事だったんですね。おかげさまで、疑問が解けました。これからの仕事に役立てたいと思います。 これからは、ここで、聞かなくても良いぐらい勉強します。 どうもありがとうございました。