2016-04-07 5 views
1

Ich versuche Anhang von Orakel 10g Datenbank herunterladen, wenn Hyperlink in Struts 1.3 geklickt wird. was zu folgenden Ausnahme alsjava.sql.SQLException: Geschlossen Verbindung, wenn Blob-Datei in IE8-Browser heruntergeladen Oracle 10g R2-Anwendungsserver

java.sql.SQLException: Geschlossen Anschluss bei oracle.jdbc.driver.DatabaseError.throwSqlException (DatabaseError.java:137) bei oracle.jdbc.driver.DatabaseError.throwSqlException (DatabaseError.java:174) bei oracle.jdbc.driver.DatabaseError.throwSqlException (DatabaseError.java:239) bei oracle.sql.BLOB.getDBAccess (BLOB.java:875) bei oracle.sql.BLOB.length (BLOB.java:142) bei _jsp._CLA__DownLoadSelected._jspService (_CLA__DownLoadSelected.java:73) bei com.orionserver [Oracle Application Server-Container für J2EE 10g (10.1.2.3.0)]. Http.OrionHttpJspPage.ser Schraubstock (OrionHttpJspPage.java:56) bei oracle.jsp.runtimev2.JspPageTable.service (JspPageTable.java:356) bei oracle.jsp.runtimev2.JspServlet.internalService (JspServlet.java:498) bei oracle.jsp. runtimev2.JspServlet.service (JspServlet.java:402) bei javax.servlet.http.HttpServlet.service (HttpServlet.java:853) bei com.evermind [Oracle Application Server-Container für J2EE 10g (10.1.2.3.0) ] .server.http.ServletRequestDispatcher.invoke (ServletRequestDispatcher.java:835) bei com.evermind [Oracle Application Server Container für J2EE 10g (10.1.2.3.0)]. server.http.ServletRequestDispatcher.forwardInternal (ServletRequestDispatcher.java: 341) bei com.evermind [Oracle Application Server Container für J2EE 10g (10.1.2.3.0)]. Server.http.HttpRequestHandler.processRequest (HttpReques tHandler.java:816) bei com.evermind [Oracle Application Server Container für J2EE 10g (10.1.2.3.0)]. server.http.AJPRequestHandler.run (AJPRequestHandler.java:231) bei com.evermind [Oracle Application Server Container für J2EE 10g (10.1.2.3.0)]. Server.http.AJPRequestHandler.run (AJPRequestHandler.java:136) bei com.evermind [Oracle Application Server Container für J2EE 10g (10.1.2.3.0)]. util.ReleasableResourcePooledExecutor $ MyWorker.run (ReleasableResourcePooledExecutor.java:186) bei java.lang.Thread.run (Thread.java:534)

1. hyper-Link-Code wie folgt aussehen:

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

2. dowloadSelected.jsp wie folgt aussieht:

<!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. Helferklassenmethode wie haben

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; } 

sieht ich von Cod Gedebuggte e mit LIVE-Datenbank aber diese Ausnahme kann nicht reproduziert werden. Diese Ausnahme hat nur die LIVE-Anwendung der ausgelieferten WAR-Datei gesehen.

+1

Sie wahrscheinlich, dass scriptlet Code benötigen, um von Ihrem JSP Umgang mit dem Blob zu bewegen in Ihre Hilfsklassenmethode, und dann haben Sie eine Getter-Methode für Ihre JSP verfügbar, um die Bytes zu erhalten 'getBytes()' anstelle Ihres aktuellen 'getBlob()'. Sie können die Bytes/den Stream nicht aus dem Blob abrufen, nachdem die Verbindung geschlossen wurde. Sie müssen dies also tun, während Ihre Verbindung innerhalb der Hilfsklassenmethode noch geöffnet ist. –

+0

Ich verstehe, was Sie sagen wollten, aber derselbe Code funktioniert auf demselben Server mit verschiedenen Anwendungen mit derselben Syntax. Ich werde versuchen, es zu dir zurück zu bekommen. Vielen Dank für Ihre Antwort @RoySix –

+0

@RoySix Danke, dass die von Ihnen angebotene Lösung funktioniert. Soll ich die Lösung posten oder wirst du es sein? –

Antwort

0

Dank @RoySix konnte ich dieses Problem lösen. Wie er im Kommentar gesagt habe, habe ich das Byte des BLOB im DTO-Objekt Setter vor dem Schließen der Verbindung gesetzt. dann bekam dieses Byte von getter-Methode Aufruf auf DTO, die von Helper-Klasse erhalten wird.

ist Nach wie aussehen JSP wie

<%@ 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> 

Helferklassenmethode sieht aus wie

...................... 
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()); 
} 
................. 
Verwandte Themen