• ベストアンサー

Oracleに接続すると、それ以降の処理を素通りしてしまう

下記のようなメソッドで<1><2>の後、すぐに<7>に処理をしてしまいます。 <1>~<7>と動くと思っていたのですが、<3>~<6>が全て無視されます。 どこか問題があるのでしょうか? ちなみに、<1>で無効なURLを指定するとSQLExceptionでcatchされます。 try { Class.forName("oracle.jdbc.OracleDriver"); try { //<1> conn = DriverManager.getConnection (URL, UID, PSW); //<3> System.out.println("Oracleと接続しました"); } catch (SQLException e) { System.out.println("oracle接続エラー"); } catch (Exception e) { System.out.println("oracle接続エラー"); } //<4> try { //<5> stmt = conn.createStatement(); //<6>sql文の作成 // select文の実行 //(略) } catch (Exception ex3) { System.out.println("なんかエラーです"); } } catch (Exception e){ System.out.println("その他エラーです"); //<2> } finally { //特になし } //<7> return list;

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

  • ベストアンサー
  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.6

#4です。 もっと下の方のメッセージが必要です。 それで、問題となっているクラスのどこでErrorが発生しているのかがわかるはずです。 そのあたりのメッセージを記述して下さい。

goo_no_kaiin
質問者

お礼

ngsvx様 お世話になります。goo_no_kaiinです。 メッセージ自体全部お出しするのはさすがに許可が下りませんでした。 こちら、JDeveloperで開発しているのですが、プログラム自身の問題ではなく、その中の設定だったようです。 java.lang.LinkageErrorについて検索してみると、 orion-web.xmlの記述を調べるように書かれておりました。 ↓ http://otndnld.oracle.co.jp/software/products/jdev10g/905_trial/readme.html そこには、 orion-web.xmlファイルで、<web-app-class-loader search-local-classes-first="true"/> が記述されている場合は、そのエントリを削除します。 と書かれてあったのですが、それでうまく実行することができました。 なぜそうなるのか?は今後調査していくことに致します。 皆様ありがとうございました。

その他の回答 (5)

  • Topica
  • ベストアンサー率0% (0/1)
回答No.5

//1を囲むExceptionにRuntimeExceptionを入れてもcatchできませんか? //3に行ってないのは確実、でCatchもされない、ってことで 思いついたのはこのくらいなんですが。

参考URL:
http://msugai.fc2web.com/java/exception.html
  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.4

ちょっと考えられないような実行のしかたですね。 Exceptionでキャッチできないということは、Errorが発生しているのかもしれません。 (だけど、Errorならメッセージがでるはずだし???) ちょっと試して欲しいのですが、try文を一番外だけにして、キャッチは }catch(Throwable e){ e.printStackTrace(); } finally{ System.out.println("終了"); } として実行してみてもらえないでしょうか。 おかしな動作があれば、これでわかると思います。

goo_no_kaiin
質問者

補足

皆様、重ね重ね、誠にありがとうございます。 トレースを取ると下記メッセージでした。 LinkageErrorが出ているとのことです。 CharacterConvertersの記述に関してはWebにもあまり出てこないようで、なぜここで?というのが理解できずにおります。 ↓ 05/08/16 16:12:44 java.lang.LinkageError: Class oracle/sql/converter/CharacterConverters violates loader constraints 05/08/16 16:12:44 at java.lang.ClassLoader.defineClass0(Native Method) 05/08/16 16:12:44 at java.lang.ClassLoader.defineClass(ClassLoader.java:537) 05/08/16 16:12:44 at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123) 05/08/16 16:12:44 at com.evermind.util.OC4JSecureClassLoader.defineClassEntry(OC4JSecureClassLoader.java:172) 05/08/16 16:12:44 at com.evermind.naming.ContextClassLoader.defineClass(ContextClassLoader.java:1170) ・・・(略) また、例えば 下記のメソッドを追加して、 public static void main(String[] args) { 問題のクラス win = new 問題のコンストラクタ(); try{ ArrayList list = win.問題のメソッド("引数"); } catch (SQLException e){ } catch (Exception e){ } として無理やり実行してみても、正常に動作します。 (勿論本来の使い方ではありません) なので、Oracleの接続自体に問題はないと思っているのですが・・・ どこかちょっとしたミスをしていると思うのですが・・・

  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.3

どうでもいいですけど、 コネクションが取得できないのに処理を続けるのはいかがなものかと・・・

goo_no_kaiin
質問者

補足

ありがとうございます。 もちろんコネクションが取得できなければ処理を中断したいのですが、 正常に取得できたのか異常なのかが判断できないでおります。 異常ならcatchして欲しいのですが、 try~  ・ドライバと接続  ・コネクションを取得  ・SQLを発行 catch~  ・エラー処理 finally のなかで、コネクションを取得でcatchされないのにSQLを発行する処理を飛ばしてメソッドが終了してしまうので困っております。

  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.2

ついでに、Class.forNameの前後にもメッセージを入れて、 実行した結果を正確に記述してください。 どのような手順で実行されているかわからないと、何とも言えないです。

goo_no_kaiin
質問者

補足

ありがとうございます。 質問時の文字数制限がありましたのでこの部分は省略していたのですが、 実は (略) Class.forName("oracle.jdbc.OracleDriver"); System.out.println("ドライバを立ち上げました"); (略) と記述しておりました。 "ドライバを立ち上げました"が出力されたのは確認できております。

  • Dooon
  • ベストアンサー率20% (36/180)
回答No.1

まず<1>~<7>と動くことはありません。 (<2>がエラールーチン内にあるため) で、<1><2><7>の処理ということがわかっているので "その他エラーです"は出力されているのですね。 「<1>で無効なURLを指定するとSQLExceptionでcatchされます。」とありますが、 これが原因ということはないのでしょうか?

goo_no_kaiin
質問者

補足

ありがとうございます。 無効なURLを指定するとSQLExceptionでcatchされますが 有効なURLを指定すると<2>に進んだあと、メソッドを終了します。 finally句を外すと、いきなりメソッドを終了します。 "Oracleと接続しました"というメッセージは出力されません。 といって、catchされることもありません。 "その他エラーです"も出力されません。 DriverManager.getConnection指定は他のメソッドでも同じ指定をしており、 今回も同じ環境で使用しているので、この指定自体が間違っているとは考えにくいのです。 「他のメソッド」は今でも正しく動きますので・・・ 指定方法ですが、 jdbc:oracle:thin:@(ホスト):(ポート):(SID) のうち、ホスト、ポート、SIDの何れかを架空の指定をした場合、SQLExceptionでcatchされます。 "jdbc:oracle:thin:"の記述を"dbc:oracle:thin:"などのようにわざと記述ミスした場合、 今回のようにエラーをcatchせずにすぐに終了します。

関連するQ&A

専門家に質問してみよう