java.sql.SQLException: закрытое соединение при загрузке BLOB-файла в сервер приложений ie8 browser oracle 10g R2

Я пытаюсь загрузить вложение из базы данных Oracle 10g, когда гиперссылка нажата в распорках 1.3. что приводит к следующему исключению как

java.sql.SQLException: закрытое соединение в oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:137) в oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:174) в oracle.jdbdror.throwSqlException(DatabaseError.java:239) в oracle.sql.BLOB.getDBAccess(BLOB.java:875) в oracle.sql.BLOB.length(BLOB.java:142) в _jsp._CLA__DownLoadSelected._jspSelected (_CLA__Down 73) на com.orionserver[Контейнеры сервера приложений Oracle для J2EE 10g (10.1.2.3.0)]. Http.OrionHttpJspPage.service(OrionHttpJspPage.java:56) на oracle.jsp.runtimev2.JspPageTable.service(JspPageTable.java:356) в oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:498) в oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:402) в javax.servlet.http.HttpServlet.service.:853) at com.evermind[Контейнеры сервера приложений Oracle для J2EE 10g (10.1.2.3.0)]. Server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:835) в com.evermind [Контейнеры сервера приложений Oracle для J2EE 10g (10.1.2.3.0)]. Server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:341) в com.evermind [Контейнеры сервера приложений Oracle для J2EE 10g (10.1.2.3.0)]. Server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:816) в com.evermind [Контейнеры сервера приложений Oracle для J2EE 10g (10.1.2.3.0)]. Server.http.AJPRequestHandler.run(AJPRequestHandler.java:231) в com.evermind [Контейнеры сервера приложений Oracle для J2EE 10g (10.1.2.3.0)]. Server.http.AJPRequestHandler.run(AJPRequestHandler.java:136) в com.evermind [Сервер приложений Oracle Контейнеры для J2EE 10g (10.1.2.3.0)]. Util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:186) в java.lang.Thread.run (Thread.java:534)

1. код гиперссылки выглядит так:

<a href="./jsp/DownLoadSelected.jsp?TrnID=3333"></a>

2. dowloadSelected.jsp выглядит так:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<%@ page contentType="text/html;charset=windows-1252" %>
<%@ page import = "java.util.*" %>
 <%@ page import ="java.sql.*" %>
   <%@ page import="java.sql.Blob.*" %>
    <%@ page import="org.apache.commons.fileupload.*"%>
      <%@ page import ="javax.naming.InitialContext" %>
        <%@ page import = "java.io.*"%>
          <%@ page import ="java.sql.PreparedStatement.*" %>
            <%@ page import="oracle.sql.BLOB"%>
              <%@ page import="java.sql.Blob"%>
                <%@ page import="org.iibf.claim.dto.*"%> 
                 <html>
                   <head>
                    <title>DownLoad File Form</title>
                      <form name="upload1" method=get ENCTYPE='multipart/form-data'>
                        <link href="../stylesheet/style.css" rel="stylesheet" type="text/css" />
                        <script>
                         alert("Download pdf");
                        </script>
                       </head>
                      <body>

                      <form name="RT_DownloadAttach">

<%
 String PurchaseId=request.getParameter("TrnID");

  System.out.println(PurchaseId+ "<- trnid ");

  LM_DownLoadAttachDto objRT_DownLoadAttachDTO =org.iibf.claim.util.CLA_Conveyance_recommenHelper.getSelectedDownload(Purchas     eId);

//old line
   Blob blob= objRT_DownLoadAttachDTO.getblob();
 System.out.println("with sql blob : "+blob.length());   

 long l =blob.length();
 oracle.sql.BLOB bbb = objRT_DownLoadAttachDTO.getblob();
  l =bbb.length();
byte[] ba =blob.getBytes(1,(int)bbb.length());  
//java.io.InputStream fis = rs.getBlob(2).getBinaryStream();
 String fileName = objRT_DownLoadAttachDTO.getName();
 OutputStream os = response.getOutputStream();
 response.setContentType("text/ascii");
 response.setHeader("Content-Disposition","attachment;filename=\""+fileName+"\"");
  response.setHeader("cache-control", "no-cache");
  os.write(ba);
os.close(); %>
     <div id="body11">
   </body>
  <html>

3. метод вспомогательного класса выглядит

  public static DownLoadAttachDto getSelectedDownload(String ReqID) throws SQLException {
 String FunctionName="getSelectedDownload"; 
    boolean update = false;
    String strSQL="";
    int updatecount=0;
    Collection collAllDownLoad = null;
    PreparedStatement prepStmt= null;
    Connection objConnection = null;
    ResultSet rs = null;
    Vector vecDownload = new Vector();
    LM_DownLoadAttachDto objRT_DownLoadAttachDTO=null;
    strSQL = " SELECT UD.* FROM  CT_UPLOADATTACHMENT_DTLS UD " +
             " WHERE UD.TRN_ID = ? ";           
    try {
      objConnection = CLA_DALHelper.getConnection();
      prepStmt = objConnection.prepareStatement(strSQL);  
      prepStmt.setString(1,ReqID);
      rs = prepStmt.executeQuery();
      while(rs.next()) {
        objRT_DownLoadAttachDTO = new LM_DownLoadAttachDto();

        objRT_DownLoadAttachDTO.setName(rs.getString("ATTACH_NAME"));

        BLOB b = (oracle.sql.BLOB)rs.getBlob("ATTACH_FILE");
        System.out.println("with in recom b helper blob : "+b.length());
        Blob bb =rs.getBlob("ATTACH_FILE");
        System.out.println("with recom bb blob : "+bb.length());
        long l = bb.length();            objRT_DownLoadAttachDTO.setblob((oracle.sql.BLOB)rs.getBlob("ATTACH_FILE"));
        }
    }
    catch(SQLException ex) {
      throw new SQLException("Unable to get File " + ex.getMessage() ); 
    }
    finally{
      if(prepStmt!=null)
       prepStmt.close();
     if(rs!=null)
       rs.close();
       objConnection.close();      
    } return objRT_DownLoadAttachDTO;  }

Я отладил по коду с базой данных LIVE, но это исключение невозможно воспроизвести. Это исключение видел только в прямом эфире приложение его развернутого военного файла.

1 ответ

Решение

Благодаря @RoySix я смог решить эту проблему. как он сказал в комментарии, я установил байт BLOB в установщик объекта DTO перед закрытием соединения. затем получил тот метод Byte by getter для DTO, который был получен из класса Helper.

Вот как выглядит JSP

<%@ page contentType="text/html;charset=windows-1252" %>
<%@ page import = "java.util.*" %>
 <%@ page import ="java.sql.*" %>
  <%@ page import="java.sql.Blob.*" %>
  <%@ page import="org.apache.commons.fileupload.*"%>
  <%@ page import ="javax.naming.InitialContext" %>
    <%@ page import = "java.io.*"%>
      <%@ page import ="java.sql.PreparedStatement.*" %>
        <%@ page import="oracle.sql.BLOB"%>
          <%@ page import="java.sql.Blob"%>
            <%@ page import="org.iibf.claim.dto.*"%> 
             <html>
               <head>
                <title>DownLoad File Form</title>
                  <form name="upload1" method=get ENCTYPE='multipart/form-data'>
                    <link href="../stylesheet/style.css" rel="stylesheet" type="text/css" />
                    <script>
                     alert("Download pdf");
                    </script>
                   </head>
                  <body>

                  <form name="RT_DownloadAttach">

 <%
  String PurchaseId=request.getParameter("TrnID");
   System.out.println(PurchaseId+ "<- trnid ");

   LM_DownLoadAttachDto objRT_DownLoadAttachDTO      =org.iibf.claim.util.CLA_Conveyance_recommenHelper.getSelectedDownload(Purchas     eId);
byte[] ba =objRT_DownLoadAttachDTO.getAttachmentByte(); 
//java.io.InputStream fis = rs.getBlob(2).getBinaryStream();
 String fileName = objRT_DownLoadAttachDTO.getName();
 OutputStream os = response.getOutputStream();
 response.setContentType("text/ascii");
 response.setHeader("Content-Disposition","attachment;filename=\""+fileName+"\"");
  response.setHeader("cache-control", "no-cache");
  os.write(ba);
os.close(); %>
     <div id="body11">
   </body>
  <html>

вспомогательный метод класса выглядит

......................
 while(rs.next()) {
    objRT_DownLoadAttachDTO = new LM_DownLoadAttachDto();
    objRT_DownLoadAttachDTO.setName(rs.getString("ATTACH_NAME"));
    BLOB b = (oracle.sql.BLOB)rs.getBlob("ATTACH_FILE");        
    Blob bb =rs.getBlob("ATTACH_FILE");        
    objRT_DownLoadAttachDTO.setblob((oracle.sql.BLOB)  rs.getBlob("ATTACH_FILE"));          
    oracle.sql.BLOB bbb = (oracle.sql.BLOB)rs.getBlob("ATTACH_FILE");
    l =bbb.length();
    byte[] ba =blob.getBytes(1,(int)bbb.length());
 }
.................
Другие вопросы по тегам