プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。

現在、Oracle8i を使っています。会社で、社員情報メンテナンス表を作っているんです。社員番号を主キーとして扱っています。

そのテーブルを Java を使って扱っているんですが、この社員番号を検索して、帰ってくる値が、登録(INSERT 文) の時の値と違います。全く違うんではなく、見た目は一緒ですけど、コンピュータで扱うと違うという返事が返ってきます。

具体的にいうと、1 で登録した番号を、SELECT 文で返ってきた値を Java で 1 と同じか?と聞いてみると、違うとコンピュータが返します。僕のプログラムがおかしいのか?と思い、家に返って ほかのDB を使って、試したところちゃんとできました。

Java のプログラムを使って、DB からかえってきた値をコンソール画面に表示したら、ちゃんと「 1 」と表示されます。しかし、その値が、「 1 」と等しいか? Javaで調べるプログラムを作ってみると、違うという答えが返ってきます。

誰かわかる方は、ご返事ください。よろしくお願いします。

A 回答 (5件)

>型は、問題ないと思います。

char 型でやっております。

(varchar2でなくて) char ということは固定長文字列ですよね?
固定長の場合、スペース埋めされますが、それは考慮されてます?

例えば、char(3)の列に、"1"を代入すると、データベース内部では
後ろに2つのスペースが埋められ "1__"(_はスペース)という形で
保存されます。

それを取り出して元の変数と比較すると
"1" と"1__"の比較なので当然等しくはならないはずですが…。
    • good
    • 0
この回答へのお礼

どうもありがとうございます。

そうなんですか!じゃ、それが問題だったんですね。

char 型の場合、空白部分がスペースで埋め尽くされるなんてことは、思いもよりませんでした。

すみませんでした。単純な事だったんですね。おかげさまで、疑問が解けました。これからの仕事に役立てたいと思います。

これからは、ここで、聞かなくても良いぐらい勉強します。

どうもありがとうございました。

お礼日時:2002/10/09 20:36

"1" と等しいか?


の部分ですが、まさか
if (data == "1") {
}
なんてやってないですよね。

JavaのString型だとしたら、
if (data.equals("1")) {
}
と書きます。

これは Java の基本中の基本です。
    • good
    • 0
この回答へのお礼

ご返事ありがとうございます。

ご指摘のような方法では、やっていません。

ちゃんとした方法で、やっています。

しかし、他の方法で、プログラムするやり方を見つけ、一応問題は解決しました。どうもありがとうございます。

家の postgreSQL では、ちゃんと動いたんですが。なんでなんでしょう?オラクル接続は、少し複雑ですね。

どうもありがとうございます。またの機会によろしくお願いします。

お礼日時:2002/10/08 21:33

JavaにSingleやDoubleはないですね。

VBと混ざりました。

floatとdoubleですね。
    • good
    • 0
この回答へのお礼

どうもご返事ありがとうございます。

そのあたりは、しっかりとやっています。

どうも、会社のパソコンの調子がおかしいような気がするんですが。

処理をしていても、飛んでしまう箇所があるので。

2度のご回答どうもありがとうございます。では、またの機会に。

お礼日時:2002/10/08 21:29

フィールドの値を、SingleやDoubleの変数に入れて、それを1と同じかという判定をしていませんか?



浮動小数は丸め誤差が発生するのでイコールで比較すると一致しない場合があります。
    • good
    • 0

型は大丈夫ですか?

    • good
    • 0
この回答へのお礼

ご回答どうもありがとうございます。

型は、問題ないと思います。char 型でやっております。

問題は、まだ解決していないのですが、少々遠回りをしたプログラムを作り、なんとかやっております。

どうもありがとうございました。

お礼日時:2002/10/08 21:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!