`
bolan392
  • 浏览: 277091 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

润乾报表动态改变SQL语句

阅读更多

最近做了一个润乾报表动态拼接SQL语句的功能,之前做的都是固定SQL传参数的形式。但是项目上有一个特殊需求,一个开发人员没做过,我就帮着就研究了一下,可能写的还不是很完美,但是以实现功能为主,留下来备用。

//开始需要导入润乾用到的包
<%@page import="com.sun.org.apache.bcel.internal.generic.NEW"%>
<%@page import="com.runqian.report4.cache.CacheManager"%>
<%@ taglib uri="/WEB-INF/runqianReport4.tld" prefix="report"%>
<%@ page import="com.runqian.report4.model.*"%> 
<%@ page import="com.runqian.report4.usermodel.*"%> 
<%@ page import="com.runqian.report4.util.*"%> 

<%
    //从请求中取出参数并进行拼接
    request.setCharacterEncoding( "GBK" );
    String startTime = (String)request.getAttribute("startTime");
    String endTime = (String)request.getAttribute("endTime");
    String agentId = (String)request.getAttribute("agentId");
    String accuseName = (String)request.getAttribute("accuseName");
    String accuseType = (String)request.getAttribute("accuseType");
    String accuseLevel = (String)request.getAttribute("accuseLevel");
    String accuseReasonContent = (String)request.getAttribute("accuseReasonContent");
    String accuseReasonContent1 = (String)request.getAttribute("accuseReasonContent1");
    String insureChannel = (String)request.getAttribute("insureChannel");
    String dealType = (String)request.getAttribute("dealType");
    String customerDepId = (String)request.getAttribute("customerDepId"); 
    String accuseMan = (String)request.getAttribute("accuseMan");
    String riskName = (String)request.getAttribute("riskName");
    String accuseTitle = (String)request.getAttribute("accuseTitle");
    String departNo = (String)request.getAttribute("departNo"); 
    String depart = (String)request.getAttribute("depart"); 
    String report = (String)request.getAttribute("reportid");
    String ifToLeadership = (String)request.getAttribute("ifToLeadership");
     
   StringBuffer param=new StringBuffer(100);
                if(agentId!=null&& !"".equals(agentId)){		
		param.append("agentId=").append(agentId).append(";");
   	}
   	if(startTime!=null && !"".equals(startTime)){
		param.append("startTime=").append(startTime).append(";");
   	}   	
   	if(endTime!=null && !"".equals(endTime)){
		param.append("endTime=").append(endTime).append(";");
   	}   	
   	if(accuseName!=null && !"".equals(accuseName)){
		param.append("accuseName=").append(accuseName).append(";");
   	}   	
   	if(accuseType!=null && !"".equals(accuseType)){
		param.append("accuseType=").append(accuseType).append(";");
   	}   	
   	if(accuseLevel!=null && !"".equals(accuseLevel)){
		param.append("accuseLevel=").append(accuseLevel).append(";");
   	}   	
   	if(accuseReasonContent1!=null && !"".equals(accuseReasonContent1)){
		param.append("accuseReasonContent=").append(accuseReasonContent1).append(";");
   	}   	
   	if(insureChannel!=null && !"".equals(insureChannel)){
		param.append("insureChannel=").append(insureChannel).append(";");
   	}   	
   	if(dealType!=null && !"".equals(dealType)){
		param.append("dealType=").append(dealType).append(";");
   	}   	
   	if(customerDepId!=null && !"".equals(customerDepId)){
		param.append("customerDepId=").append(customerDepId).append(";");
   	}   	
   	if(accuseMan!=null && !"".equals(accuseMan)){
		param.append("accuseMan=").append(accuseMan).append(";");
   	}   	
   	if(riskName!=null && !"".equals(riskName)){
		param.append("riskName=").append(riskName).append(";");
   	}   	
   	if(accuseTitle!=null && !"".equals(accuseTitle)){
		param.append("accuseTitle=").append(accuseTitle).append(";");
   	}   	
   	if(departNo!=null && !"".equals(departNo)){
		param.append("departNo=").append(departNo).append(";");
   	}   	  
   	if(depart!=null && !"".equals(depart)){
		param.append("depart=").append(depart).append(";");
   	}   	  
   	if(ifToLeadership!=null && !"".equals(ifToLeadership)){
		param.append("ifToLeadership=").append(ifToLeadership).append(";");
   	}   	  
   	   	 
    String path = request.getContextPath();
    //加载报表的定义对象	 	
    ReportDefine rd = (ReportDefine)ReportUtils.read(application.getRealPath("apps/reportFiles/yd_accuser_query.raq")); 
	   
	   	 
     /*修改报表SQL语句开始*/
     DataSetMetaData dsmd = rd.getDataSetMetaData(); //获得报表定义中的数据集元对象 
   SQLDataSetConfig sdsc = (SQLDataSetConfig)  
     dsmd.getDataSetConfig(0); //取到需要修改的数据集对象
   String sql =sdsc.getSQL(); //取得数据集对象中的SQL 
     //修改sql 
     if(accuseReasonContent!=null && !"".equals(accuseReasonContent)){
		   sql = sql + accuseReasonContent ;
		}  
	//	sql = sql + accuseReasonContent ;
		 
	 	//System.out.println("报表对象的SQL后:"+sql); 
		
		//将修改后的SQL设置到数据集对象中 
		sdsc.setSQL(sql); 
		dsmd.setDataSetConfig(0,sdsc); 
		rd.setDataSetMetaData(dsmd); 
		/*修改报表SQL语句结束*/
		
		/*修改报表参数语句开始*/
		
		//ParamMetaData paramMetaData = rd.getParamMetaData();
		//Param p2 = paramMetaData.getParam(0);
 		//p2.setValue("0001");
 		//paramMetaData.setParam(0,p2);
		
		//rd.setParamMetaData(paramMetaData);
		
		//ParamMetaData paramMetaData = new ParamMetaData();
		
		ParamMetaData pmd=new ParamMetaData();  //构造参数元数据
		
		
    
		Param param1 = new Param();  //构造参数定义
		param1.setParamName("agentId");  //设置参数名
		param1.setDataType(Types.DT_STRING);  //设置参数数据类型
		param1.setParamType(Param.PARAM_NORMAL);  //设置参数类型(普通参数或动态参数)
		if(agentId!=null&& !"".equals(agentId)){ 
		  param1.setValue(agentId);  //设参数缺省值 
		}
		
				
		pmd.addParam(param1);  //把参数定义添加到参数元数据中 
    
		Param param2 = new Param();  //构造参数定义
		param2.setParamName("startTime");  //设置参数名
		param2.setDataType(Types.DT_STRING);  //设置参数数据类型
		param2.setParamType(Param.PARAM_NORMAL);  //设置参数类型(普通参数或动态参数)
		if(startTime!=null && !"".equals(startTime)){
		  param2.setValue(startTime);  //设参数缺省值  
		}
		pmd.addParam(param2);  //把参数定义添加到参数元数据中
   	
	    	   	
   	
		Param param3 = new Param();  //构造参数定义
		param3.setParamName("endTime");  //设置参数名
		param3.setDataType(Types.DT_STRING);  //设置参数数据类型
		param3.setParamType(Param.PARAM_NORMAL);  //设置参数类型(普通参数或动态参数)
		if(endTime!=null && !"".equals(endTime)){
		  param3.setValue(endTime);  //设参数缺省值  
		}
		pmd.addParam(param3);  //把参数定义添加到参数元数据中 
   	
	 	Param param4 = new Param();  //构造参数定义
		param4.setParamName("accuseName");  //设置参数名
		param4.setDataType(Types.DT_STRING);  //设置参数数据类型
		param4.setParamType(Param.PARAM_NORMAL);  //设置参数类型(普通参数或动态参数)
		if(accuseName!=null && !"".equals(accuseName)){
		  param4.setValue(accuseName);  //设参数缺省值  
		} 
		pmd.addParam(param4);  //把参数定义添加到参数元数据中
   	  	
  
		Param param5 = new Param();  //构造参数定义
		param5.setParamName("accuseType");  //设置参数名
		param5.setDataType(Types.DT_STRING);  //设置参数数据类型
		param5.setParamType(Param.PARAM_NORMAL);  //设置参数类型(普通参数或动态参数)
		if(accuseType!=null && !"".equals(accuseType)){
		  param5.setValue(accuseType);  //设参数缺省值  
		}
		pmd.addParam(param5);  //把参数定义添加到参数元数据中
   	   	
   
		Param param6 = new Param();  //构造参数定义
		param6.setParamName("accuseLevel");  //设置参数名
		param6.setDataType(Types.DT_STRING);  //设置参数数据类型
		param6.setParamType(Param.PARAM_NORMAL);  //设置参数类型(普通参数或动态参数)
		if(accuseLevel!=null && !"".equals(accuseLevel)){
		   param6.setValue(accuseLevel);  //设参数缺省值  
		} 
		pmd.addParam(param6);  //把参数定义添加到参数元数据中
   	  	
  
		//param.append("accuseReasonContent=").append(accuseReasonContent).append(";");
		Param param7 = new Param();  //构造参数定义
		param7.setParamName("accuseReasonContent");  //设置参数名
		param7.setDataType(Types.DT_STRING);  //设置参数数据类型
		param7.setParamType(Param.PARAM_NORMAL);  //设置参数类型(普通参数或动态参数)
		if(accuseReasonContent1!=null && !"".equals(accuseReasonContent1)){
		    param7.setValue(accuseReasonContent1);  //设参数缺省值  
		}  
		pmd.addParam(param7);  //把参数定义添加到参数元数据中
    	
   
		Param param8 = new Param();  //构造参数定义
		param8.setParamName("insureChannel");  //设置参数名
		param8.setDataType(Types.DT_STRING);  //设置参数数据类型
		param8.setParamType(Param.PARAM_NORMAL);  //设置参数类型(普通参数或动态参数)
		if(insureChannel!=null && !"".equals(insureChannel)){
		   param8.setValue(insureChannel);  //设参数缺省值  
		}
		pmd.addParam(param8);  //把参数定义添加到参数元数据中
      	
   	
    	Param param9 = new Param();  //构造参数定义
		param9.setParamName("dealType");  //设置参数名
		param9.setDataType(Types.DT_STRING);  //设置参数数据类型
		param9.setParamType(Param.PARAM_NORMAL);  //设置参数类型(普通参数或动态参数)
		if(dealType!=null && !"".equals(dealType)){
		    param9.setValue(dealType);  //设参数缺省值    
   	    }   	
   	    pmd.addParam(param9);  //把参数定义添加到参数元数据中
   	    
   	
		Param param10 = new Param();  //构造参数定义
		param10.setParamName("customerDepId");  //设置参数名
		param10.setDataType(Types.DT_STRING);  //设置参数数据类型
		param10.setParamType(Param.PARAM_NORMAL);  //设置参数类型(普通参数或动态参数)
		if(customerDepId!=null && !"".equals(customerDepId)){
	    	param10.setValue(customerDepId);  //设参数缺省值  
		}
		pmd.addParam(param10);  //把参数定义添加到参数元数据中
   	   	
  
		Param param11 = new Param();  //构造参数定义
		param11.setParamName("accuseMan");  //设置参数名
		param11.setDataType(Types.DT_STRING);  //设置参数数据类型
		param11.setParamType(Param.PARAM_NORMAL);  //设置参数类型(普通参数或动态参数)
		if(accuseMan!=null && !"".equals(accuseMan)){
		   param11.setValue(accuseMan);  //设参数缺省值  
		}   
		pmd.addParam(param11);  //把参数定义添加到参数元数据中
  	

		Param param12 = new Param();  //构造参数定义
		param12.setParamName("riskName");  //设置参数名
		param12.setDataType(Types.DT_STRING);  //设置参数数据类型
		param12.setParamType(Param.PARAM_NORMAL);  //设置参数类型(普通参数或动态参数)
		if(riskName!=null && !"".equals(riskName)){
		   param12.setValue(riskName);  //设参数缺省值  
		  }
		pmd.addParam(param12);  //把参数定义添加到参数元数据中
      	
   	
		Param param13 = new Param();  //构造参数定义
		param13.setParamName("accuseTitle");  //设置参数名
		param13.setDataType(Types.DT_STRING);  //设置参数数据类型
		param13.setParamType(Param.PARAM_NORMAL);  //设置参数类型(普通参数或动态参数)
		if(accuseTitle!=null && !"".equals(accuseTitle)){
		  param13.setValue(accuseTitle);  //设参数缺省值  
		} 
		pmd.addParam(param13);  //把参数定义添加到参数元数据中
    	
   	
		Param param14 = new Param();  //构造参数定义
		param14.setParamName("departNo");  //设置参数名
		param14.setDataType(Types.DT_STRING);  //设置参数数据类型
		param14.setParamType(Param.PARAM_NORMAL);  //设置参数类型(普通参数或动态参数)
		if(departNo!=null && !"".equals(departNo)){
		    param14.setValue(departNo);  //设参数缺省值  
		}  
		pmd.addParam(param14);  //把参数定义添加到参数元数据中
   	  
   
		Param param15 = new Param();  //构造参数定义
		param15.setParamName("depart");  //设置参数名
		param15.setDataType(Types.DT_STRING);  //设置参数数据类型
		param15.setParamType(Param.PARAM_NORMAL);  //设置参数类型(普通参数或动态参数)
		if(depart!=null && !"".equals(depart)){
		  param15.setValue(depart);  //设参数缺省值  
		} 
		pmd.addParam(param15);  //把参数定义添加到参数元数据中
     	  
   	
		Param param16 = new Param();  //构造参数定义
		param16.setParamName("ifToLeadership");  //设置参数名
		param16.setDataType(Types.DT_STRING);  //设置参数数据类型
		param16.setParamType(Param.PARAM_NORMAL);  //设置参数类型(普通参数或动态参数)
		if(ifToLeadership!=null && !"".equals(ifToLeadership)){
		  param16.setValue(ifToLeadership);  //设参数缺省值  
		}
		pmd.addParam(param16);  //把参数定义添加到参数元数据中 
		
		
		rd.setParamMetaData(pmd);  //把参数元数据赋给ReportDefine
				
		
		/*修改报表参数语句开始*/
		
		
		Context ctx = new Context(); 
		ctx.setParamValue("accuseName",accuseName); 
		Engine engine = new Engine(rd,ctx); 
		IReport ireport = engine.calc();
 		
 		request.setAttribute("ireport",ireport);  
 		request.setAttribute("mycontext",ctx);
 		CacheManager.getInstance().deleteAllReport();//清空所有缓存
   %>
//使用标签显示报表对象
<report:html name="report"   
	  srcType="defineBean" 
	  beanName="ireport"
      needSaveAsExcel="yes"
      needSaveAsPdf="yes"
      needPrint="yes"
      printLabel="打印"
      width="-1"
      contextName="mycontext"
      params="<%=param.toString()%>"
      useCache="no"/> 
	<%
		request.removeAttribute("ireport");
	%>

 

分享到:
评论
1 楼 hy_zhym 2013-01-05  
CacheManager.getInstance().deleteAllReport();//清空所有缓存 
这一句有问题,他会把所有报表的缓存都清除,也就是说打开多个报表页面的时候,只有最后一个正确,应该是
CacheManager.getInstance().deleteReportEntry("ireport");//ireport为beanName的值。

还有个问题beanName如果都叫ireport的话生成excel报表的时候 会互相覆盖,所有最好不要用同名的beanName

相关推荐

    birt报表的动态sql

    动态SQL是BIRT报表设计中的一个重要概念,它允许开发者根据用户输入或业务需求动态地构造SQL查询语句,极大地提高了报表的灵活性和实用性。 在BIRT中,动态SQL主要体现在以下几个方面: 1. **参数化查询**:BIRT...

    泛微系统SQL语句大全

    通过SQL语句设置访问控制,确保数据的安全性,防止未经授权的访问和操作。 综上所述,"泛微系统SQL语句大全"是一份宝贵的资源,它包含了构建、管理和优化泛微系统所需的各种SQL技巧和实例。无论你是系统管理员、...

    根据sql语句生成rdlc报表,字段宽度自适应

    本话题聚焦于如何根据SQL语句生成RDLC报表,并实现字段宽度的自适应功能。 首先,让我们深入理解RDLC报表的生成过程。RDLC报表是在Visual Studio中通过Report Designer创建的,它允许开发者在设计时预览报表布局,...

    库存收发存报表汇总统计数据库语句实现

    本案例主要介绍如何利用T-SQL语句在Microsoft SQL Server(mssql)数据库中实现库存收发存的实时查询功能,通过一条SQL语句完成业务逻辑。 首先,我们来理解一下库存收发存报表的基本业务要求。库存包括期初库存、...

    云星空如何制作直接SQL报表

    输入报表所需的SQL语句,云星空将根据SQL语句生成报表数据。 ### 步骤四:设置报表列属性 设置报表列的标题、可见、发布宽度等属性。 ### 步骤五:设置任务签到中心 将报表设置到任务签到中心,供用户使用。 ##...

    在水晶报表中使用SQL数据库

    报表设计者可以通过查询设计器,直观地构建和编辑SQL语句。 5. **字段和公式**:从数据库中选择的字段会显示在字段面板上,可以将它们拖放到报表设计区域。同时,水晶报表支持创建自定义公式,用于数据转换、计算或...

    SQL语句自动生成器简体中文版

    例如,如果你想从一个名为"Employees"的表中查询所有薪水超过5000的员工,只需要在界面上选择"Employees"表,找到"Salary"字段,设置条件为"大于5000",软件就会生成如下SQL语句: ```sql SELECT * FROM Employees ...

    浅谈动态SQL语句在教学管理系统设计中的应用.pdf

    然而,对于那些需要根据运行时的条件生成不同的SQL语句或执行数据库结构改变的情况,嵌入式SQL的局限性就显现出来,比如无法直接执行DDL(Data Definition Language)语句,如创建表或数据库等。 动态SQL语句则允许...

    系统直接SQL语句报表双表头解决方案.pdf

    在使用金蝶K/3系统时,经常会遇到需要通过直接编写SQL语句来制作报表的情况。特别是在处理双表头报表时,可以通过SQL语句的编写来实现复杂的报表样式。 ### 知识点一:金蝶K/3系统报表制作 在金蝶K/3系统中,报表...

    学习SQL应知道的动态SQL语句基本语法

    在SQL(Structured Query Language)中,动态SQL是一种高级特性,允许在运行时构建和执行SQL语句。这种技术尤其有用,因为SQL语句通常在编译时是静态的,而动态SQL可以应对不确定的查询需求或者需要根据程序逻辑生成...

    水晶报表原代码数据库SQL

    2. **查询语句**:在报表设计中,通过建立数据集或直接在报表中编写SQL查询语句,可以筛选和组织数据。这可能涉及到SQL的SELECT语句,包含WHERE子句进行条件过滤,GROUP BY和HAVING子句进行分组,以及ORDER BY子句...

    基于SQL语句的医院临时性数据统计.pdf

    这些需求通常没有现成的报表系统能够立即提供,这就需要通过编写SQL语句来快速响应。例如,通过编写包含SELECT、FROM和WHERE等子句的SQL语句,可以直接从数据库中提取出所需的数据,而不必经过复杂的报表生成过程。 ...

    SQL语句教程

    本教程旨在系统性地介绍SQL语句的使用,无论是初学者还是经验丰富的数据工作者都能从中受益。 首先,我们来了解SQL的基础——SQL指令。SQL主要包含以下几种基本操作: 1. **SELECT**:这是SQL中最常用的语句,用于...

    润干报表4.0技术白皮书_企业版.doc

    - **非线性报表模型**:通过引入创新的非线性报表数学模型,简化了复杂报表的设计过程,使开发者无需编写复杂的SQL语句即可完成报表设计,极大地提高了报表设计的效率。 - **强关联语义模型**:支持多源关联分片、不...

    MySQL 存储过程中执行动态SQL语句的方法

    2. **设置SQL语句**: 通过`SET`语句,我们可以给这个变量赋值,使其包含我们想要执行的动态SQL。这里假设我们要查询`aa_list`表的所有列: ```sql SET my_sql = 'SELECT * FROM aa_list'; ``` 3. **准备动态SQL*...

    ureportfiles_包含sql语言和ureport配置_ureport报表文件_

    1. 报表参数:UReport支持动态参数,用户可以在设计时设置参数,通过参数传递值到SQL语句中,实现报表的动态生成,如`myReportAnalysis.ureport.xml`可能需要用户输入特定日期范围进行分析。 2. 报表样式:XML文件中...

    单数据集分页SQL实现层式报表

    在FineReport中,SQL语句会根据当前页码进行相应的逻辑计算,从而动态生成正确的SQL语句。 5. 报表主体设计和行式引擎设置 完成分页SQL编写后,接下来是报表主体的设计。在FineReport中,设计报表时需要将数据集中...

    帆软报表插件,显示sql数据集的查询时间。

    SQL执行时间是指从发送SQL查询到获取查询结果所需的时间,它包含了解析SQL语句、生成执行计划、执行计划以及返回结果等步骤。在大数据量和复杂查询的场景下,SQL执行时间是衡量数据库性能的重要指标之一。 帆软报表...

    教学管理系统数据库ER图及SQL语句.pdf

    系统功能的实现需要使用SQL语句,包括数据的插入、更新和删除操作。例如,插入学生信息的SQL语句可能如下: ```sql INSERT INTO 学生基本信息 (学号, 姓名, 性别, 出生日期, 入学成绩, 所在系号) VALUES ('12432201'...

    直接使用SQL语句读取Excel表格内容,把表中内容导入数据库中

    根据给定的文件信息,我们可以深入探讨如何使用SQL语句直接读取Excel表格内容,并将这些数据导入到数据库中。这一技术在数据迁移、数据整合以及报表自动化等场景下非常实用。下面,我们将详细解析这一过程中的关键...

Global site tag (gtag.js) - Google Analytics