经常会遇到一些报表需要根据不同的情况(参数)连接不同的数据源从而完成相应的数据的展现,也就是经常说的动态数据源报表。报表工具通常的做法有两种,一是不同的情况加载不同的数据源连接参数,如:url、driver、username、password等;二是利用已配置的多个连接池,根据不同情况选择。这里通过一个实例,说明润乾报表的实现过程及改进方案。

报表说明

应用中需要通过参数控制报表连接的数据源,当参数flag为1时连接数据源一(db1),否则连接数据源二(db2)。

润乾报表实现

首先根据flag参数为context设置不同数据源(这里以两个hsql数据库为例):

String flag=request.getParameter("flag");
        Connection con1 = null;
        Connection con2 = null;
        try{
            Driver driver = (Driver)Class.forName("org.hsqldb.jdbcDriver").newInstance();
            DriverManager.registerDriver(driver);
            con1=DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/runqianDB","sa","");
            con2=DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/demo","sa","");
        }catch (Exception e){
            e.printStackTrace();
        }
 
        Context cxt=  new Context();
        String defDsName =cxt.getDefDataSourceName ();
        if ("1".equals(flag) || "1"==flag){
            cxt.setConnection(defDsName,con1);
        }else{
            cxt.setConnection(defDsName,con2);
        }
    
    将cxt存入request:
    request.setAttribute("myContext", cxt );
 
    以context方式发布报表:
    <report:htmlname="report1"
contextName=”myContext”
    />

 

通过使用润乾报表的API可以完成动态数据源报表,详尽的API的确为应用开发人员提供了诸多便利。不过,由于上面的做法我们看到都需要依赖Java编程,修改维护性很差,对一般报表开发维护人员都是不小的挑战。

这种情况下,如果采用润乾公司基于润乾报表引擎开发的集算报表,则可以非常方便完成动态数据源报表需求,集算报表内置了用于处理报表数据源准备的集算器,在集算器中编写处理动态数据源的代码比较简单。

集算报表实现

编写集算脚本

使用集算脚本编辑工具完成计算脚本,并为报表输出计算后结果集:

java 集成 润乾报表 润乾报表开源_java 集成 润乾报表

:根据参数flag值决定连接哪个数据源(db1和db2为数据源名称)

:执行sql取数

:关闭连接

:将结果集返回报表 

报表调用

java 集成 润乾报表 润乾报表开源_java_02

在集算脚本中处理动态数据源后,将结果输出给报表模板,报表模板使用时就好像在使用一个数据源一样,从而简化了报表开发。此外,集算器脚本允许用户分步编写计算逻辑,并且代码比较简单(相对Java和sql来说),从而提升了报表开发和维护效率。



https://blog.51cto.com/report5/1540360