1. 概述
1.1 版本
版本 | 功能变动 |
---|---|
10.0 | - |
10.0.17 | 查询界面新增复制 SQL 语句功能,详见本文第 3 节 |
1.2 功能介绍
数据库查询是指从定义好的数据库连接中,也就是数据源中使用 SQL 语句来选择需要的字段,一般是直接对数据源中的数据库表直接进行操作。
设计器中的数据源分为两种:模板数据集和 服务器数据集 ,两者被引用的范围不同。
模板数据集:将信息保存到当前的 cpt 文件当中,即只能适用于当前打开的这一张报表。
服务器数据集:服务器数据集的配置信息保存在当前服务器 FineDB 数据库的 fine_conf_entity 表中,当前服务器上面设计任意一张报表都可以使用该数据集。
本文以模板数据集为例进行说明。服务器数据集的操作方法和模板数据集类似,在此不再赘述。
2. 查询方式
数据库查询方式可分为:表查询、视图查询、模糊查询三种。
2.1 表查询
2.1.1 查询步骤
1)点击模板>模板数据集,弹出模板数据集对话框,点击模板数据集窗口的左上角的按钮,选择数据库查询,然后给数据库查询命名,选择所需的数据连接,如下图所示:
2)选中查询编辑器,在其中输入 SQL 语句SELECT * FROM ORDERS where ORDERID=${ID}。
这是一个带参数的 SQL 查询,${}为参数的形式,中间的 ID 即参数的名称,点击预览,跳出提示框,输入参数 ID=10004 ,结果可以在预览组中看,实际就是执行SELECT * FROM ORDERS where ORDERID=10004的 SQL 查询。如下图所示:
注:一般的 SQL 语句通用,只是在设置参数时需要参照以上的形式。
注:若参数名称是字母和数字组合(例如:A1)则会被系统认为是单元格,如果不设置默认值会触发模板计算,从而导致执行一次 SQL。所以用户需要避免使用字母和数字组合的参数名称,若要用则必须给它设置默认值。
2.1.2 数据集界面的基本属性
下面介绍整个数据集界面的一些基本属性,如下表所示:
类型 | 对于查询类型,FineReport 既支持普通的 SQL 查询,也支持存储过程,并且这两种类型的查询语句中都可以包含参数。 注: SQL 查询和存储过程,通过 JDBC最终都是由数据库软件来解析执行,并将结果返回给 FineReport 来显示,所以查询执行的速度和性能完全由对应的数据库软件来决定。 |
向导 | FineReport 提供了简单的向导来帮助用户创建简单的 SQL 查询和存储过程。 注:由于 SQL 语言比较复杂,FineReport 提供的向导只能定义常用的简单 SQL 查询(不支持分组,子查询等)。 存储过程的向导基本可以满足要求,能够列出所连接数据库中所有的存储过程,并根据所选择存储过程的名字,自动获得存储过程的参数来产生可以执行的存储过程语句。 |
查询编辑器 | 当向导产生的查询不能完全满足要求的时候,可以通过我们提供的文本编辑器来编辑任意复杂的查询语句(利用向导产生的存储过程,一般不需要再次编辑)。 |
参数 | FineReport 可以完美地支持参数查询,在定义查询语句的时候,只需要用特殊字符串 "${XXX}" (参数值为数值型,为${参数},否则为 '${XXX}') ,将参数名字前后包含起来,点击下面的刷新按钮,可以给参数赋默认值。这样当报表引擎执行这个 SQL 语句时,在 C/S 系统会弹出一个对话框来要求用户输入对应参数的数值,并且会自动显示默认值,在 B/S 系统会遍历客户端(通常是浏览器)传递过来的所有参数数值; FineReport 利用这些参数的数值来替换查询中对应的字符串“${XXX}”,将替换过的查询语句提交给数据库解析和执行。 比如: 1. 用户输入的查询语句为: select * from Customers where ID = ${ID}; 2. 从客户端动态取到的 ID 数值为: 1; 3. 根据参数值产生新的查询语句:select * from Customers where ID = 1,利用 JDBC 将这个新产生的查询语句传递给相应的数据库解析和执行。 |
最大预览数 | 为了加快预览的速度,设置了预览的最大行数(默认值 200),这个数值只有在点击预览按钮的时候才起作用,不会错误地作用到引用这个查询的报表模板文件中。 |
2.2 视图查询
视图查询是指对定义好的数据源中的视图进行操作。
2.2.1 数据库查询
1)点击菜单模板>模板数据集,弹出模板数据集对话框,点击模板数据集窗口的左上角的按钮,选择数据库查询,然后给数据库查询命名,即可添加视图查询。如下图所示:
2.2.2 使用视图查询
选择数据源使用 SQL 对视图查询进行操作。下文以 SQL Server 视图数据库为例:
在查询编辑器中输入 SQL 语句:SELECT * FROM [sys].[types] 其中 [sys].[types] 是某个视图查询的名字,然后点击预览即可看到视图查询引用成功。如下图所示:
注:可以将数据连接中的表、视图直接拖动到查询编辑器中。
2.3 模糊查询
在表下方有一块空白搜索框,它们用作模糊查询。例如想要搜索客户相关的表,在搜索框中填入客户二字,则会进行自动搜索进行模糊匹配,如下图所示:
注1:FineReport 数据库查询只支持一条自然 SQL 语句的查询,不支持多个自然 SQL 语句,比如 SELECT * FROM A SELECT * FROM B
注2:create 、drop 等新建表、删除表不在官方支持范围内,官方只支持 select 。
3. 复制 SQL 语句
在之前版本中,若 SQL 中含有参数,就不方便直接从查询界面将 SQL 语句复制到其他地方。
10.0.17 及之后的版本,新增「查看执行 SQL」功能,方便用户粘贴其他数据库软件进行排查测试。
3.1 示例
点击查询页面上方的「查看执行 SQL」按钮,由于 SQL 语句中包含参数,会自动弹出参数输入界面。如下图所示:
执行的 SQL 语句自动复制到剪贴板,用户可将其粘贴到其他数据库软件进行排查测试。如下图所示:
3.2 注意事项
1)若SQL中调用了自定义函数,则无法正常使用「查看执行SQL」功能。复制的SQL语句在其他数据库软件无法正常运行。
2)某些用户为了 SQL 防注入 ,开启了转义功能。当参数与转义字符匹配时,会影响查询结果。在这种情况下会提示:转义部分参数防止SQL注入,查询结果与预期可能不符,请检查并修改参数或联系管理员
鼠标触碰右上角提示图标,可以看到已转义的参数。在本示例中,输入的参数值 1002 是被转义的参数。
4. 注意事项
4.1 数据集命名
在创建数据库查询时,数据集的命名不可有「.」,否则在将字段拖入单元格后,预览会出现没有数据且日志报错现象。
1)创建数据库查询并命名为 ds1.4 ,将字段拖入单元格,点击保存并预览,如下图所示:
2)展示预览结果为空,如下图所示:
3)进入%FR_HOME%\logs 下打开fanruan.log 文件,发现报错,如下图所示:
注:用该数据库查询创建的数据集制作图表时不会产生预览失败和报错现象。