• ベストアンサー

Oracle 8i に入っている値が、おかしい(指定した値ではない)

お世話になります。 現在、Oracle8i を使っています。会社で、社員情報メンテナンス表を作っているんです。社員番号を主キーとして扱っています。 そのテーブルを Java を使って扱っているんですが、この社員番号を検索して、帰ってくる値が、登録(INSERT 文) の時の値と違います。全く違うんではなく、見た目は一緒ですけど、コンピュータで扱うと違うという返事が返ってきます。 具体的にいうと、1 で登録した番号を、SELECT 文で返ってきた値を Java で 1 と同じか?と聞いてみると、違うとコンピュータが返します。僕のプログラムがおかしいのか?と思い、家に返って ほかのDB を使って、試したところちゃんとできました。 Java のプログラムを使って、DB からかえってきた値をコンソール画面に表示したら、ちゃんと「 1 」と表示されます。しかし、その値が、「 1 」と等しいか? Javaで調べるプログラムを作ってみると、違うという答えが返ってきます。 誰かわかる方は、ご返事ください。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Khazad
  • ベストアンサー率30% (17/56)
回答No.5

>型は、問題ないと思います。char 型でやっております。 (varchar2でなくて) char ということは固定長文字列ですよね? 固定長の場合、スペース埋めされますが、それは考慮されてます? 例えば、char(3)の列に、"1"を代入すると、データベース内部では 後ろに2つのスペースが埋められ "1__"(_はスペース)という形で 保存されます。 それを取り出して元の変数と比較すると "1" と"1__"の比較なので当然等しくはならないはずですが…。

kamkamkam3
質問者

お礼

どうもありがとうございます。 そうなんですか!じゃ、それが問題だったんですね。 char 型の場合、空白部分がスペースで埋め尽くされるなんてことは、思いもよりませんでした。 すみませんでした。単純な事だったんですね。おかげさまで、疑問が解けました。これからの仕事に役立てたいと思います。 これからは、ここで、聞かなくても良いぐらい勉強します。 どうもありがとうございました。

その他の回答 (4)

  • yuji
  • ベストアンサー率37% (64/169)
回答No.4

"1" と等しいか? の部分ですが、まさか if (data == "1") { } なんてやってないですよね。 JavaのString型だとしたら、 if (data.equals("1")) { } と書きます。 これは Java の基本中の基本です。

kamkamkam3
質問者

お礼

ご返事ありがとうございます。 ご指摘のような方法では、やっていません。 ちゃんとした方法で、やっています。 しかし、他の方法で、プログラムするやり方を見つけ、一応問題は解決しました。どうもありがとうございます。 家の postgreSQL では、ちゃんと動いたんですが。なんでなんでしょう?オラクル接続は、少し複雑ですね。 どうもありがとうございます。またの機会によろしくお願いします。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

JavaにSingleやDoubleはないですね。VBと混ざりました。 floatとdoubleですね。

kamkamkam3
質問者

お礼

どうもご返事ありがとうございます。 そのあたりは、しっかりとやっています。 どうも、会社のパソコンの調子がおかしいような気がするんですが。 処理をしていても、飛んでしまう箇所があるので。 2度のご回答どうもありがとうございます。では、またの機会に。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

フィールドの値を、SingleやDoubleの変数に入れて、それを1と同じかという判定をしていませんか? 浮動小数は丸め誤差が発生するのでイコールで比較すると一致しない場合があります。

  • me_no_car
  • ベストアンサー率24% (22/90)
回答No.1

型は大丈夫ですか?

kamkamkam3
質問者

お礼

ご回答どうもありがとうございます。 型は、問題ないと思います。char 型でやっております。 問題は、まだ解決していないのですが、少々遠回りをしたプログラムを作り、なんとかやっております。 どうもありがとうございました。

関連するQ&A

  • ORACLE9iのNUMBER型について

    ORACLE9iのNUMBER型に「0.99」という値をいれ、SQL*PLUSやOEMコンソールでその値を確認すると、「.99」という表示になってしまいます。また、「-0.99」をいれると表示は「-.99」になってしまいます。どうすれば「0」を表示させられるのでしょうか?一応、1.*以上か、-1.*以下の少数は、ちゃんと表示されます。 バージョンは、ORACLE9i Database R9.2.0.1.0です。 宜しくお願い致します。

  • DBのinsert/updateを1ボタンでできる方法

    スケジュール登録などで1つのボタンで スケジュールを新規登録する機能(insert)とスケジュールを更新する機能(update)を兼ねる場合どのように実装したらいいでしょうか?以下のやり方以外で、効率よくできる方法を知りたいです。どうかよろしくお願いします。 <実装例概略> ・フォームから値をとってくる。 ・その値がdbにはいっているか(select文)を調べる。 ・値がdbにはいっていればupdate文、dbにはいっていなければinsert文を発行する。 os:winxp(professional) db:Oracle9i

  • oracle9iにJDBC接続が出来ない

    oracle9iにJDBCで接続したいのですがI/O例外が出てうまくいきません。 多分、DriverManager.getConnection の引数のURLが間違っているのだと思うのですが。 jdbc:oracle:thin:@<ホスト名>:<リスナのポート番号>:<Oracle SID> ホスト名・ポート番号・Oracle SID はどこを見ればわかるのでしょうか? ちなみに出ているエラーは以下のとうりです。 Exception in thread "main" java.sql.SQLException: I/O例外です。: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=150999297)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4)))) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:180) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:222) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:335) at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:361) at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:442) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:321) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at JavaDataAccess01.main(JavaDataAccess01.java:13) 何か参考になるHPなどあれば教えてください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Eclipse3.1 から Oracle8i につなぐには?

    いつもお世話になっております。 業務に空きができたので、「JAVAの勉強して」と言われました。 そこで、Eclipseを先ほどダウンロードしました。 先日、JAVAの教育に行ったので、基礎の基礎くらいはできます。 (が、いまいち分かってません。JAVAは苦手です。) 既に業務で使っているOracleのDBがあるので「とりあえず、Oracleからデータをひっぱってきて表示できるくらいのプログラムを作ってみて」といわれました。 しかし、まず、EclipseからOracleのDBを読みに行くには何を設定したら良いのかが分かりません。 JAVAの教育でもDBを使ったのですが、Oracleではなかったのと、講師に言われたとおりに進めていただけでいまいち理解できていなかったので、「Oracleだったらこうやれば良い」ということも思いつきませんでした。 何を用意すれば言いのか、どこの設定を変えれば良いのかご存知でしたら、手がかりの部分だけでもいいので教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • CommonSQLEnvironmentに直接、値を入力

    PostgresSQLのデータベースに、CommonSQLEnvironmentを使って、コンソール画面のテーブル表示画面のセルに直接、値を入力したいのですが、ムリでしょうか、やはり、インサート文を使わないとダメでしょうかね。 ご教授お願いします。

  • Oracleについての質問

    Oracle初心者です。 つかぬことをお伺いして恐縮ですが。。 社内他部門で開発したあるアプリケーションソフトがあります。 そこには、社員情報などを登録することができ、名前や、年齢、住所、電話番号、写真等。。。さまざまな情報を入力して最後に登録ボタンを押すことで情報が更新されます。 データベースはOracle 9iで、私はSQL*PLUSから簡単なSQL文だけ使うことができます。社員テーブルは名前、読み仮名、従業員コードの三つの列を持っていますので、アプリケーション上で登録した情報の一部は、このテーブルを参照することで確認できる状態です。 質問は、「登録」ボタンを押したときにどのテーブルを更新しているのかをどうすれば調べることができるか、です。 社員テーブルだけでなく、ほかのテーブルも更新しているのですが、SQL文をどこかで発行していると思います。 環境はApache v1.3.27とTomcatv3.2.4(+mod_jkで連携)です(私よくわからないのですが)。 と、いってもプログラム構成もわからずに答えられるか、といわれるかも知れませんが、どこをどんな感じで調べたらいいかヒントを頂けると助かります。 よろしくお願いします。

  • レコード追加に要する時間について。

    insert文でレコードを追加する際、すでにテーブルに登録されているレコードが多ければ多いほど、insert文でレコードを追加する時間は長くなるのですか?できればその理由もご存知な方ご教授おねがいします。 OSとDBのバージョンは以下です。 OS:Solaris8 DB:Oracle8

  • Pro*CでのINSERT文

    こんにちわ。 Pro*CでのINSERT文について質問させてください。 例えば、CUSTOMERSというテーブルを作り、メンバーをC_ID, CNAME, ADDRESSとしたときに、INSERT文を使用しまして、 新規のお客さんのデータをいれようと考えています。そのとき、C_IDの値をすでに入れてあるC_IDの最大値+1として、格納したいのですが、どうも旨くいかずに行き詰っています。MAX(C_ID)を使用することは分かっているのですが、INSERTとの組み合わせ方がわからず、困っています。 どなたかうまいやりかた(SQL文)があれば教えていただけないでしょうか? もちろん、C言語で書きましたプログラム内に組み込みたいと考えています。 OSはUNIX(SUN)、DBはORACLE9を使用しています。 どうかよろしくお願いいたします。

  • アプレットでのDB接続の行い方

    JAVAアプレットでAccessのDBに接続して値を取得し、その値をブラウザ上に表示するプログラムを作っています。ソースコードをコンパイルしブラウザ(IE6.0)に表示させようとすると、 Exception:java.security.AccessControlException: access denied(java.lang.RuntimePermission accessClassInPackage.sun.jdbc.odbc) という文がブラウザ上に表示され、値が表示されません。なにかJAVAのセキリティにひっかかっていると思われるのですが、どんな方法ならDBから値を取って表示させられるのでしょうか。

    • ベストアンサー
    • Java
  • Oracle SQL実行時間について

    Oracle初心者です。 あるテーブル(レコード数:100万件程度)に対してSelectするSQLの実行時間を、Oracleのset timing on, set autotrace onlyで計測しました。 結果は1000ms程度だったのですが、 同じSQL文を実行するプログラム(java)を作成し、pstmt.executequery()してresultsetからデータをgetするまでの時間をログに出力させたところ、400ms程度でした。 プログラムの性能目標として、set timing on の値を設定していたため、実際の結果(javaプログラムが出力した処理時間)の評価に困っています。 差がでる原因をご教示いただけませんでしょうか。 宜しくお願いします。