birt动态SQL实现有三种方式:拼接SQL、绑定变量和让应用程序拼接,birt得到返回结果集方式。
1.拼接SQL方式
在数据集中写SQL,如下:
select id ,code,name,type from type
选中数据集,点script方式,在beforeOpen事件中写如下SQL:
var type = reportContext.getParameterValue("type"); var name = reportContext.getParameterValue("name"); var query = this.queryText; if(type!=null){ query = query + " and type = "+type; } if(name!=null&&name!=""){ query = query + " and name = '"+name+"'"; } this.queryText = query;
然后就可以了,当然,也可以不写第一步,直接所有的SQL都在beforeOpen中拼接。
但是,拼接SQL方式不仅复杂容易错,还会导致SQL注入风险。
2.绑定变量方式
在数据集的SQL中写如下SQL
select id ,code,name,type from location where (type = ? or ? is null ) and ( name = ? or ? is null )
然后配置数据集的参数,如下图:
最后一项是链接报表的参数。倒数第二项是默认值,填null
这种方式不会有SQL注入风险。
要注意参数与问号个数要相同
当采用绑定变量时,数据集参数和报表参数关联时,可能会出现这样的异常:
org.eclipse.birt.report.data.oda.jdbc.JDBCException: Cannot set preparedStatement null value.
原因是数据集参数中不能将Intger 类型设置为null值,要解决这个问题,可以将
Intger 类型的参数全部改成DECIMAL,原因待研究。
另外如果想要查看执行的SQL,可以在数据集的SCRIPT的beforeOpen事件写如下脚本:
importPackage( Packages.java.io ); out = new PrintWriter( new FileWriter("c:/debuginfo.txt", true ) ); out.println("queryText:-->"+ this.queryText); out.close();
第三种是在应该程序处理查询,BIRT负责取出结果集展示,采用的是BIRT+SPRING+MYBATIS。
当然这里MYBATIS也可以是其它框架,思路一样。
BirtBeanFactory.java
public class BirtBeanFactory { private static BeanFactory ctx; public synchronized static void setBeanFactory(BeanFactory beanFactory) { ctx = beanFactory; } public static Object getBean(String str) { return ctx.getBean(str); } public static <T> T getBean(Class<T> clazz) { return ctx.getBean(clazz); } }
GlobalInitializer.java
public class GlobalInitializer implements InitializingBean ,BeanFactoryAware{ private BeanFactory beanFactory; @Override public void afterPropertiesSet() throws Exception { BirtBeanFactory.setBeanFactory(beanFactory); } @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { this.beanFactory = beanFactory; } }
BirtDataFactory.java
public class BirtDataFactory { private TestService manager = (TestService) BirtBeanFactory.getBean(TestService.class); public List<Location> findListByDto(LocationDto dto){ return manager.findListByDto(dto); } }
spring配置文件配置下:
<bean id="globalInitializer" class="com.test.birt.core.GlobalInitializer"/>
这样代码层就完成了,
在birt中创建脚本数据源
创建脚本数据集,在数据集的open事件中写这样的方法:
importPackage(Packages.com.test.birt.core); importPackage(Packages.com.test.birt.report.dto); factory = new BirtDataFactory(); dto = new TestDto(); dto.setCreateTimeStart(reportContext.getParameterValue("createTimeStart")); dto.setCreateTimeEnd(reportContext.getParameterValue("createTimeEnd")); if(reportContext.getParameterValue("dcId")!=null){ dto.setDcId(reportContext.getParameterValue("dcId").longValue()); } collectList=factory.findListByDto(dto); iterator = collectList.iterator();
在fecth阶段,写这样 的代码:
if(iterator.hasNext() == false ){ return false; } else{ var collectBean = iterator.next(); row["id"]=collectBean.getId(); row["name"] = collectBean.getName(); return true; }
这样就可以了。
要显示的字段(row["id"]等)可以在数据集中编辑,选中数据集--EDIT--OUTPUT COLUMNS---ADD
相关推荐
fire bird常用sql语句 一、分页写法小例: 二、显示表名和表结构 三、使用ISQL连接数据库 四、更新字段注释 五、显示字段注释 六、更新表注释 七、查询所有的表和视图(包括系统表和系统视图) 八、查询所有的用户表...
FlyBird Database Manager 是一款MySQL管理工具。 推荐度5颗星,非常值的尝试的MySQL管理软件。 优点有: 免安装, 基于浏览器,支持导出Excel, CSV, SQL多种格式数据。 相比navicat dbeaver , workbench 更加轻量化...
FlyBird Database Manager 是一款MySQL管理工具。 推荐度5颗星,非常值的尝试的MySQL管理软件。 优点有: 免安装, 基于浏览器,支持导出Excel, CSV, SQL多种格式数据。 相比navicat dbeaver , workbench 更加轻量化...
FlyBird Database Manager 是一款MySQL管理工具。 推荐度5颗星,非常值的尝试的MySQL管理软件。 优点有: 免安装, 基于浏览器,支持导出Excel, CSV, SQL多种格式数据。 相比navicat dbeaver , workbench 更加轻量化...
FlyBird Database Manager 是一款MySQL管理工具。 推荐度5颗星,非常值的尝试的MySQL管理软件。 优点有: 免安装, 基于浏览器,支持导出Excel, CSV, SQL多种格式数据。 相比navicat dbeaver , workbench 更加轻量化...
数据库技术:如关系型数据库(如MySQL、Oracle、SQL Server)和非关系型数据库(如MongoDB、Redis)等。 前端开发:HTML、CSS、JavaScript等用于构建网页和Web应用程序的技术。 后端开发:涉及服务器端编程、API开发...
T-SQL,语句大全,涵盖了T-SQL的常用的语法,还有实例解释,非常不错的..........
sqlqs-SQL查询字符串 SQL谓词解析器的一个非常简单且基本的查询...用 const { parse , sqlize , where } = require ( 'sqlqs' )let qs = { class : 'in.Mammal,Bird' , genus : 'eq.Neotoma' , id : 'gt.1000'}// par
在数据库上执行sql表达式并显示结果 通过csv格式的文件导入和导出数据 浏览表和视图的内容,看着他们在输入数据时不断增长 在浏览表时选择要删除和编辑的数据 插入,删除,显示Blob字段的内容 播放数据库元数据,...
谷歌师兄的leetcode刷题...SQL)。 这个位 - 带有用于测试的 GUI - 将事件读取和写入 Lightning 日历 SQLite 数据库。 有太多事情需要我去查阅(堆栈溢出等),我觉得有必要分享结果。 很快就会有一个Android客户端。
We'd like to thank the following people in particular. <br>First, we'd like to thank members of the Microsoft Press book team for making this book possible: Danielle Bird, acquisition editor;...
Birds.js 由node.js驱动的软盘鸟的多人游戏副本! 如何安装 安装 下载项目并使用控制台进入项目目录 ... 通过导入bird.sql安装数据库 更新scoreSystem类以添加您的数据库凭据。 打开games_files /
(ps: async模块可换成其它Promise模块如bluebird、q等) 因为Node.js的mysql模块本身对于事务的封装过于简单,而且直接使用会有很严重callback hell,故我们封装了两个方法,一个用来初始化sql & params,一个用来...
而基于对数据的理解,再重新机器学习的算法对数据做大多数公司实际上没有任何费用去建造复杂的数据分析平台,面对快速变化的业务需求,很多数据工程师都把自己的青春埋葬在SQL里了。 水壶 Kettle是“ Kettle ETTL ...
Internet Mail, Phoenix Mail, Ipswitch IMail Server, Reach-a-Mail, Mozilla Thunderbird, Opera Mail, The Bat!, PocoMail, Pegasus Mail, etc. Instant Messenger Password Recovers lost or forgotten ...
第一部分 NoSQL入门 第1章 NoSQL的概念及适用范围 2 ...17.10 Hummingbird和C5T 274 17.11 GeoCouch 275 17.12 Alchemy Database 276 17.13 Webdis 276 17.14 小结 276 附录A 安装与配置 278
知更鸟 模拟数据生成器 资料类型 文本 名称 名 姓 全名 代码 字母数字 字母 数字 整数 浮点 日期 日期 时间 约会时间 时间戳记 地点 国家 城市 压缩 纬度 经度 高度 选项 范围 格式 ... sql 选择数据库
使用 Python Turtle 开发的十几款游戏,所有游戏都是用 Python 和它的 Turtle 模块实现,游戏包括贪吃蛇、吃豆子、走迷宫、乒乓球、四子连珠、Flappy bird 等经典街机游戏。 游戏在任何可以安装 Python 的地方运行,...
select * from pet where (birth>’1980′ and species=’dog’) or species=’bird’ — 对null 的条件 select * from pet where sex is not null — 所有名字第四位是n 的宠物信息是 select * from pet where ...
8.3 Bird’s-Eye View.....172 8.4 Fast-Forward >>.....177 9 Putting SQL to Work 178 9.1 Introducing SQLite..... . 178 9.2 SQL 101......179 9.3 Hello, Database.....181 9.4 Data Binding...... . 189...