论坛首页 入门技术论坛

关于JXLS请教一下

浏览 2509 次
该帖已经被评为新手帖
作者 正文
   发表时间:2007-06-27  
最近用jxls 开发项目 
现在有个需求要作一个统计表 列很多 我是一次性用一个sql来查出来
用jxls的 JDBC ResultSet 来生成excel
我的程序代码如下
public Map getStatisticsByType(String userId, long exameType, String exameYear,List userProvince){
		String pName="";
		Map beans = new HashMap();
		for(Iterator it=userProvince.iterator(); it.hasNext();){
			 String name=(String)it.next();
			 pName=pName+",'"+name+"'";
		}
		if ( pName.startsWith( "," ) )
		{
			pName = pName.substring( 1 );
		}
		String temps="";
		for(int i=51; i<=84; i++){
			temps=temps+" sum(decode(WGSSDM,"+i+",1,0)) , ";
		}
		String sql="select l.L_NAME , "+temps+
				"count(1), "+ 
				"l.ID "+
				" from T_KSCXJLXXB k, T_LOCATION l where KSSZS in("+pName+") " +
				" and k.KSSZS=l.ID and k.KSLBDM="+exameType+" " +
				" and k.KSSJ >= to_date('"+exameYear+"-1-1','YYYY-MM-DD') " +
				" and k.KSSJ <= to_date('"+exameYear+"-12-31','YYYY-MM-DD') group by k.KSSZS, l.L_NAME, l.ID ";
		Session session=this.getSessionFactory().openSession();
		
		try {
				Connection conn=session.connection();
				Statement stmt = conn.createStatement();
				ResultSet rs = stmt.executeQuery(sql);
				ResultSetCollection rsc = new ResultSetCollection(rs, false);
				beans.put( "statisticsByType", rsc );
				rs.close();
				stmt.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			
			e.printStackTrace();
		}

		session.close();
		return beans;
	}


到了ResultSetCollection rsc = new ResultSetCollection(rs, false);就抛异常了
异常
14:24:23,644 DEBUG ConnectionManager:419 - opening JDBC connection
14:24:26,933 ERROR ResultSetCollection:61 - Can't get number of ResultSet records. Try to pass it to a corresponding constructor
java.sql.SQLException: 对只转发结果集的无效操作: last
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)
	at oracle.jdbc.driver.BaseResultSet.last(BaseResultSet.java:81)
	at com.mchange.v2.c3p0.impl.NewProxyResultSet.last(NewProxyResultSet.java:3368)
	at net.sf.jxls.report.ResultSetCollection.setNumberOfRows(ResultSetCollection.java:99)
	at net.sf.jxls.report.ResultSetCollection.<init>(ResultSetCollection.java:59)
	at com.eduv.dao.RecordDao.getStatisticsByType(RecordDao.java:218)
	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.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:203)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:162)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:209)
	at $Proxy5.getStatisticsByType(Unknown Source)
	at com.eduv.webwork.action.StatisticsAction.goToListStatistics(StatisticsAction.java:157)
	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 com.opensymphony.xwork.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:358)
	at com.opensymphony.xwork.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:218)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:192)
	at com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:175)
	at com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
	at com.opensymphony.xwork.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:115)
	at com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
	at com.opensymphony.webwork.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:174)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
	at com.opensymphony.webwork.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:169)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
	at com.opensymphony.xwork.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:151)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
	at com.opensymphony.xwork.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:186)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
	at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:116)
	at com.opensymphony.webwork.dispatcher.DispatcherUtils.serviceAction(DispatcherUtils.java:225)
	at com.opensymphony.webwork.dispatcher.ServletDispatcher.service(ServletDispatcher.java:111)
	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 com.eduv.tools.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:29)
	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:230)
	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:261)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Thread.java:619)


难道我还是要去建一个VO来 set这么多的值 再做个list传给 jxls来处理么
有什么好的办法么?
   发表时间:2007-09-18  
跟我报的错一样。后来我改了用另外一种方法:
可以这样写
try {  
                Connection conn=session.connection();  
                Statement stmt = conn.createStatement();  
                ResultSet rs = stmt.executeQuery(sql);  
                RowSetDynaClass rsdc = new RowSetDynaClass(rs, false);
        Map beans = new HashMap();
        beans.put( "statisticsByType", rsdc.getRows() );
        
                rs.close();  
                stmt.close();  
        } catch (SQLException e) {  
            // TODO Auto-generated catch block  
              
            e.printStackTrace();  
        }
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics