action代码:
//课程管理PDF
public ActionForward courcemanagePDF(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {

File reportFile = new File("E:/pdf/courcemanage.jasper");

Map parameters = new HashMap();

byte[] bytes=new byte[10240];
try {
bytes = JasperRunManager.runReportToPdf(reportFile.getPath(),parameters,new NoticeDAO().getConn());
response.setContentType("application f");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();

//conn.close();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
异常:net.sf.jasperreports.engine.JRException: Error preparing statement for executing the report query : select * from courcemanage
at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createStatement(JRJdbcQueryExecuter.java:192)
at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:123)
at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:668)
at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:588)
at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1212)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:842)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:791)
at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:63)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:402)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:234)
at net.sf.jasperreports.engine.JasperRunManager.runReportToPdf(JasperRunManager.java:203)
at com.cx.struts.action.WpdfPrintAction.courcemanagePDF(WpdfPrintAction.java:188)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:269)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:170)
at org.apache.struts.actions.MappingDispatchAction.execute(MappingDispatchAction.java:166)
at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at filter.StrutsFilter.service(StrutsFilter.java:19)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.ajaxanywhere.AAFilter.doFilter(AAFilter.java:46)
at filter.AjaxFilter.doFilter(AjaxFilter.java:24)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:866)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:716)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1498)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Object has been closed.
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.validateClosedState(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.prepareStatement(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.prepareStatement(Unknown Source)
at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createStatement(JRJdbcQueryExecuter.java:162)
... 46 more各位大哥帮忙看下,

解决方案 »

  1.   

    Caused by: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Object has been closed.
    你是不是已经把Connection给关闭了?
    代码拿出来看看
      

  2.   

    JasperRunManager.runReportToPdf(reportFile.getPath(),parameters,new NoticeDAO().getConn());
    检查一下runReportToPdf这个方法
    和NoticeDAO().getConn()这个方法
    debug一下看看在哪一行抛出的异常就知道什么原因了
      

  3.   

    JRJdbcQueryExecuter.createStatement(JRJdbcQueryExecuter.java:192)也就知道 连接一块有总是,你看下
    new NoticeDAO().getConn() 得到的 conntion 是不是null
      

  4.   

    获取connection的代码public Connection getConn(){ return this.getSession().getSessionFactory().openSession().connection();
    }
    这个应该没问题得吧,
    我用下面这个试了下,还是一样的结果public Connection getConn(){
    try {
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
    return DriverManager.getConnection("jdbc:microsoft:sqlserver://dataserver:1433;DatabaseName=best", "sa", "sa");
    } catch (InstantiationException e) {
    e.printStackTrace();
    } catch (IllegalAccessException e) {
    e.printStackTrace();
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
      

  5.   

    我测试了下,connection是正确的,不是NULL