• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:javaサーブレットからのoracle接続エラー)

JavaサーブレットからのOracle接続エラーについて

このQ&Aのポイント
  • JavaサーブレットからOracleに接続する際に発生したエラーについて解決方法を教えてください。
  • JavaサーブレットからOracleに接続しようとする際に起こるエラー「java.sql.SQLRecoverableException: クローズされた接続です。」の解決方法について教えてください。
  • JavaサーブレットからのOracle接続エラーが発生し、エラーメッセージは「java.sql.SQLRecoverableException: クローズされた接続です。」です。どのように解決すればよいでしょうか?

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

  • ベストアンサー
  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.3

試しにfinally以外でcloseしてみて。

kenken1917
質問者

お礼

ご回答ありがとうございます。 finally以外でcloseしてみたのですが、同様の結果となりました。 その後、色々調査した結果、ステートメントのcloseができてないことが原因であることが、わかりました。 皆様、ご協力ありがとうございました。

その他の回答 (2)

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

#1さんに追記で どこでエラーが起きているのかが分からないので それも書いてもらえないかしら?

kenken1917
質問者

お礼

ご回答ありがとうございます。 プログラムとエラー発生箇所について補足入力致しました。 よろしくお願い致します。

kenken1917
質問者

補足

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ DB db= null; ResultSet rs = null; try { db= new DB(strDriver,strJdbcPrefix,strHostName,strUserName,strPassWord,strDbName); //DBへ接続 db.dbAccess(); //パラメータ取得 String[] Parameter = new String[3]; Parameter[0] = request.getParameter("no"); no = null; tel = null; address = null; //パラメータチェック用 boolean pramErrFlag = false; //No.取得用 String machin = null; String rtnPram1 = null; String rtnPram2 = null; //パラメータが、No.の場合 if (Parameter[0] != null && Parameter[0].length() != 0 && Parameter[0].length() == 12){ no = Parameter[0]; //テストマスタ件数チェック switch(selectCntMstTest(rs,db)){ case 1: //パラメータ正常 pramErrFlag = true; machin = selectMstTest(rs,db); rtnPram1 = machin; rtnPram2 = "0"; break; case 0: //「パラメータエラー(該当Noなし)」のパラメータを設定する。 rtnPram1 = Parameter[0]; rtnPram2 = "2"; break; default: //「パラメータエラー(該当No複数存在)」のパラメータを設定する。 rtnPram1 = Parameter[0]; rtnPram2 = "1"; } } //パラメータエラーの場合 if (pramErrFlag != true){ //バッチファイル起動 String command = "/home/test/bin/test.bat " + rtnPram1 + " " + rtnPram2; Runtime runtime = Runtime.getRuntime(); runtime.exec(command); response.setStatus(HttpServletResponse.SC_BAD_REQUEST); }else{ //バッチファイル起動 String command = "/home/test/bin/test.bat " + rtnPram1 + " " + rtnPram2; Runtime runtime = Runtime.getRuntime(); runtime.exec(command); response.setStatus(HttpServletResponse.SC_OK); } } catch (Exception e) { response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); e.printStackTrace(); logger.error(e); } finally { try{ db.dbClose(); ●●●●問題発生箇所 }catch (Exception e) { response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); e.printStackTrace(); } }

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.1

記載のコードだけでは、実際にどこでcloseをしているのかが分からないので 例外が発生するcloseより前にどこかでcloseしているのではとしか言いようがない気がします。 ログなどを仕込んで確認してみてはいかかでしょうか。

kenken1917
質問者

お礼

ご回答ありがとうございます。 ログに出力して確認したいと考えては、いるのですがコネクションの状態等をどのようにしたら出力できるかがわからなくて困っております。 出力方法をご存知でしたら教えて頂けますでしょうか。 よろしくお願い致します。

kenken1917
質問者

補足

isClosed()で調べることが、できました。 DBアクセス時、sql発行時、DBクローズ時の前で調べましたが、クローズはしていませんでした。。。

関連するQ&A