最近做了一个润乾报表动态拼接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");
%>
分享到:
相关推荐
动态SQL是BIRT报表设计中的一个重要概念,它允许开发者根据用户输入或业务需求动态地构造SQL查询语句,极大地提高了报表的灵活性和实用性。 在BIRT中,动态SQL主要体现在以下几个方面: 1. **参数化查询**:BIRT...
通过SQL语句设置访问控制,确保数据的安全性,防止未经授权的访问和操作。 综上所述,"泛微系统SQL语句大全"是一份宝贵的资源,它包含了构建、管理和优化泛微系统所需的各种SQL技巧和实例。无论你是系统管理员、...
本话题聚焦于如何根据SQL语句生成RDLC报表,并实现字段宽度的自适应功能。 首先,让我们深入理解RDLC报表的生成过程。RDLC报表是在Visual Studio中通过Report Designer创建的,它允许开发者在设计时预览报表布局,...
本案例主要介绍如何利用T-SQL语句在Microsoft SQL Server(mssql)数据库中实现库存收发存的实时查询功能,通过一条SQL语句完成业务逻辑。 首先,我们来理解一下库存收发存报表的基本业务要求。库存包括期初库存、...
输入报表所需的SQL语句,云星空将根据SQL语句生成报表数据。 ### 步骤四:设置报表列属性 设置报表列的标题、可见、发布宽度等属性。 ### 步骤五:设置任务签到中心 将报表设置到任务签到中心,供用户使用。 ##...
报表设计者可以通过查询设计器,直观地构建和编辑SQL语句。 5. **字段和公式**:从数据库中选择的字段会显示在字段面板上,可以将它们拖放到报表设计区域。同时,水晶报表支持创建自定义公式,用于数据转换、计算或...
例如,如果你想从一个名为"Employees"的表中查询所有薪水超过5000的员工,只需要在界面上选择"Employees"表,找到"Salary"字段,设置条件为"大于5000",软件就会生成如下SQL语句: ```sql SELECT * FROM Employees ...
然而,对于那些需要根据运行时的条件生成不同的SQL语句或执行数据库结构改变的情况,嵌入式SQL的局限性就显现出来,比如无法直接执行DDL(Data Definition Language)语句,如创建表或数据库等。 动态SQL语句则允许...
在使用金蝶K/3系统时,经常会遇到需要通过直接编写SQL语句来制作报表的情况。特别是在处理双表头报表时,可以通过SQL语句的编写来实现复杂的报表样式。 ### 知识点一:金蝶K/3系统报表制作 在金蝶K/3系统中,报表...
在SQL(Structured Query Language)中,动态SQL是一种高级特性,允许在运行时构建和执行SQL语句。这种技术尤其有用,因为SQL语句通常在编译时是静态的,而动态SQL可以应对不确定的查询需求或者需要根据程序逻辑生成...
2. **查询语句**:在报表设计中,通过建立数据集或直接在报表中编写SQL查询语句,可以筛选和组织数据。这可能涉及到SQL的SELECT语句,包含WHERE子句进行条件过滤,GROUP BY和HAVING子句进行分组,以及ORDER BY子句...
这些需求通常没有现成的报表系统能够立即提供,这就需要通过编写SQL语句来快速响应。例如,通过编写包含SELECT、FROM和WHERE等子句的SQL语句,可以直接从数据库中提取出所需的数据,而不必经过复杂的报表生成过程。 ...
本教程旨在系统性地介绍SQL语句的使用,无论是初学者还是经验丰富的数据工作者都能从中受益。 首先,我们来了解SQL的基础——SQL指令。SQL主要包含以下几种基本操作: 1. **SELECT**:这是SQL中最常用的语句,用于...
- **非线性报表模型**:通过引入创新的非线性报表数学模型,简化了复杂报表的设计过程,使开发者无需编写复杂的SQL语句即可完成报表设计,极大地提高了报表设计的效率。 - **强关联语义模型**:支持多源关联分片、不...
2. **设置SQL语句**: 通过`SET`语句,我们可以给这个变量赋值,使其包含我们想要执行的动态SQL。这里假设我们要查询`aa_list`表的所有列: ```sql SET my_sql = 'SELECT * FROM aa_list'; ``` 3. **准备动态SQL*...
1. 报表参数:UReport支持动态参数,用户可以在设计时设置参数,通过参数传递值到SQL语句中,实现报表的动态生成,如`myReportAnalysis.ureport.xml`可能需要用户输入特定日期范围进行分析。 2. 报表样式:XML文件中...
在FineReport中,SQL语句会根据当前页码进行相应的逻辑计算,从而动态生成正确的SQL语句。 5. 报表主体设计和行式引擎设置 完成分页SQL编写后,接下来是报表主体的设计。在FineReport中,设计报表时需要将数据集中...
SQL执行时间是指从发送SQL查询到获取查询结果所需的时间,它包含了解析SQL语句、生成执行计划、执行计划以及返回结果等步骤。在大数据量和复杂查询的场景下,SQL执行时间是衡量数据库性能的重要指标之一。 帆软报表...
系统功能的实现需要使用SQL语句,包括数据的插入、更新和删除操作。例如,插入学生信息的SQL语句可能如下: ```sql INSERT INTO 学生基本信息 (学号, 姓名, 性别, 出生日期, 入学成绩, 所在系号) VALUES ('12432201'...
根据给定的文件信息,我们可以深入探讨如何使用SQL语句直接读取Excel表格内容,并将这些数据导入到数据库中。这一技术在数据迁移、数据整合以及报表自动化等场景下非常实用。下面,我们将详细解析这一过程中的关键...