我的代码如下:while (rsFirstLevelOrg.next()) {
String orgname = rsFirstLevelOrg.getString("orgname");
String orgid = rsFirstLevelOrg.getString("BUSINID");

// 查询一级汇总 SQL
String sumSql = generateSumSql(orgid, orgname);

StrBufSql.append(" union all " + sumSql);

// 查询各子级机构 SQL
String orgListSql = generateOrgListSql(orgid, ifExport,"1");
//StrBufSql.append(" union all " + orgListSql);
//查询子机构id
String orgIdSql = "select orgid from ("+orgListSql+")";
Connection conn = null;
PreparedStatement pstm = null;
ResultSet rs = null;
conn = dbBroker.getConnection();
pstm = conn.prepareStatement(orgIdSql);
rs = pstm.executeQuery();
while(rs.next()){
String orgId = rs.getString("orgid");
String querySelfOrg = generateQuerySql(orgId,ifExport,"0");
StrBufSql.append(" union all "+querySelfOrg);
}
rs.close();
pstm.close();
conn.close();
}我的问题是:我的最外层循环是rs结果集,里面的循环是另一个rs结果集,但是当最外层的循环开始执行第二次循环的时候报如下错误:java.sql.SQLException: The statement has been closed.
at tyrex.resource.jdbc.xa.TyrexStatementImpl.getStatement(Unknown Source)
at tyrex.resource.jdbc.xa.TyrexResultSetImpl.validateOpen(Unknown Source)
at tyrex.resource.jdbc.xa.TyrexResultSetImpl.next(Unknown Source)
at com.omgap.datacount.dao.AppMonthStateDAO.generateQuerySql(AppMonthStateDAO.java:351)
at com.omgap.datacount.dao.AppMonthStateDAO.getDataAmount(AppMonthStateDAO.java:50)
at com.omgap.datacount.action.OpenAppStaAction.getDataList(OpenAppStaAction.java:150)
at sun.reflect.GeneratedMethodAccessor65.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at com.fins.gt.action.FrontController.doFilter(FrontController.java:154)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at com.fins.gt.server.EncodeFilter.doFilter(EncodeFilter.java:67)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)是不是rs结果集里面不能再有结果集,还是因为存在并发的问题,这个问题一直没解决。我要是把里面的循环去掉,程序就可以正常运行了。在线等回答

解决方案 »

  1.   

    知道是什么问题了 statement被关闭了 还在执行statement肯定会报错。。看代码很糟。。看不出来
      

  2.   

    statement被关闭了,将  pstm.close();去掉
      

  3.   

                    conn = dbBroker.getConnection();
                    pstm = conn.prepareStatement(orgIdSql);
                    rs = pstm.executeQuery();当你运行这些的时候,外层的conn,pstm,rs都已经被取代
      

  4.   

    去掉pstm.close();
    用的MSSQL吧?