数据库数据集
教学视频
简介
利用定义好的直连数据库的数据源可以利用SQL语句或存储过程定义数据集,用于查询数据库中的一张多多张表,或者直接查询视图或存储过程获得报表的数据。
在数据源设置面板中,选择第一个数据集标签页,并单击添加按钮:
在弹出菜单中选择创建数据库表数据集:
在弹出的数据设置界面中进行配置工作,如下图:
配置好数据集,可以单击确定按钮生成数据集,也可以单击预览SQL数据按钮预览数据:
单击确定按钮,这样就创建好了数据集。
动态SQL
数据库数据集的SQL也支持动态参数设置,例如:
select * from EMPLOYEE where DEPT_ID=${$dept_id}
其中${}是Bask Report的表达式的定义方法
$dept_id表示使用报表中名称为dept_id的参数。
参数的定义可以参考:报表参数
利用表达式我们可以实现更为丰富的SQL语句编写。
范例1
${
if (isEmpty($dept_id)) {
return "select * from EMPLOYEE"
} else {
return "select * from EMPLOYEE where DEPT_ID = ${$dept_id}"
}
}
范例2
${
var sql = "select * from EMPLOYEE where 1=1"
if (isNotEmpty($dept_id)) {
sql = sql + "and DEPT_ID = ${$dept_id}"
}
if (isNotEmpty($employee_id)) {
sql = sql + "and EMPLOYEE_ID = ${$employee_id}"
}
if (isNotEmpty($sex)) {
sql = sql + "and SEX = ${$sex}"
}
return sql;
}
又因为BaskReport中表达式可对一个普通值进行判断,值为null或为false皆返回false,否则返回true(类似Javascript语法),所以上面的SQL又可简写成下面的样子:
${
var sql = "select * from EMPLOYEE where 1=1"
if ($dept_id) {
sql = sql + "and DEPT_ID = ${$dept_id}"
}
if ($employee_id) {
sql = sql + "and EMPLOYEE_ID = ${$employee_id}"
}
if ($sex) {
sql = sql + "and SEX = ${$sex}"
}
return sql;
}
上面的sql变量的拼装时没有使用sql+="..."方式,原因是BaskReport中表达式语法不支持这种赋值写法,所以使用的是sql=sql+....。
查看运行时SQL
在使用基于SQL产生的数据集时,因为SQL可能由复杂的表达式生成,此时我们可能需要查看运行时执行的SQL具体是什么样子,要实现这一功能也比较简单,BaskReport当中日志是基于apache的commons-logging包实现的,日志输出的级别是debug,所以在不做任何配置的情况下是看不到运行时输出的SQL。 如果需要查看运行时的SQL,我们只需要在项目的classpath下添加两个文件即可。
第一个文件是commons-logging.properties,内容如下:
org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
第二个文件是simplelog.properties,内容如下:
org.apache.commons.logging.simplelog.defaultlog=debug
添加好上面两个properties文件后,重启应用,再次访问BaskReport报表,如果报表中使用到了SQL类型的数据集,那么就可以在控制台看到具体的SQL输出,如下面所示:
上图当中运行时的SQL就是:select * from employee。 可以看到上面配置的的日志输出格式比较简单,只是在控制台输出,如果需要输出到其它地方,或格式有进一步要求,可以按照commons-logging的要求配置即可,这里不再赘述。