数据库数据集

教学视频

简介

利用定义好的直连数据库的数据源可以利用SQL语句或存储过程定义数据集,用于查询数据库中的一张多多张表,或者直接查询视图或存储过程获得报表的数据。

在数据源设置面板中,选择第一个数据集标签页,并单击添加按钮:

image-20210412123947359

在弹出菜单中选择创建数据库表数据集:

image-20210412124139316

在弹出的数据设置界面中进行配置工作,如下图:

image-20210412132729619

配置好数据集,可以单击确定按钮生成数据集,也可以单击预览SQL数据按钮预览数据:

image-20210412132833569

image-20210412132859854

单击确定按钮,这样就创建好了数据集。

动态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的要求配置即可,这里不再赘述。

results matching ""

    No results matching ""