• 报表如何动态切换数据源


    在实际应用中,多个数据库中表结构相同,要求报表展示时能动态控制报表从想要的数据库中取数,这个需求实现的方法比较多,最简单的方法是使用集算器脚本方式,在里边直接通过内置的一些函数就可以实现,具体实现可以参考: 动态切换数据源–通过参数实现动态数据源 

    另外一种方式可以通过 api 接口实现,下面主要是介绍下如何通过 api 接口实现报表数据源的动态切换。

    一:在报表配置中增加多数据源,例如:

    1. <DB name="demo">
    2. <property name="url" value="jdbc:hsqldb:hsql://127.0.0.1/demo" >property>
    3. <property name="driver" value="org.hsqldb.jdbcDriver" >property>
    4. <property name="type" value="13" >property>
    5. <property name="user" value="sa" >property>
    6. <property name="password" >property>
    7. <property name="batchSize" value="1000" >property>
    8. <property name="autoConnect" value="false" >property>
    9. <property name="useSchema" value="false" >property>
    10. <property name="addTilde" value="false" >property>
    11. <property name="dbCharset" value="UTF-8" >property>
    12. <property name="clientCharset" value="UTF-8" >property>
    13. <property name="needTransContent" value="false" >property>
    14. <property name="needTransSentence" value="false" >property>
    15. <property name="caseSentence" value="false" >property>
    16. DB>
    17. <DB name="demo1">
    18. <property name="url" value="jdbc:hsqldb:hsql://127.0.0.1/demo" >property>
    19. <property name="driver" value="org.hsqldb.jdbcDriver" >property>
    20. <property name="type" value="13" >property>
    21. <property name="user" value="sa" >property>
    22. <property name="password" >property>
    23. <property name="batchSize" value="1000" >property>
    24. <property name="autoConnect" value="false" >property>
    25. <property name="useSchema" value="false" >property>
    26. <property name="addTilde" value="false" >property>
    27. <property name="dbCharset" value="UTF-8" >property>
    28. <property name="clientCharset" value="UTF-8" >property>
    29. <property name="needTransContent" value="false" >property>
    30. <property name="needTransSentence" value="false" >property>
    31. <property name="caseSentence" value="false" >property>
    32. DB>

     

    这里边的 DB name 属性也就是配置的数据源名称,这里配置了两个数据源 demo 和 demo1。

    二:制作报表

    具体报表制作这里不做具体介绍,按照实际需求制作报表就行,主要是在数据集中指定数据源名称,这里设置成 demo,如图:

    三:在显示报表的 jsp 中增加代码,这里使用报表自带的 showReport.jsp

    1. String ds = request.getParameter( "ds" );//数据源名称通过url参数传入,本例中ds值为demo或者demo1
    2. Context context=new Context();//生成运算环境
    3. context.setConnection("demo",context.getConnectionFactory(ds).getConnection());//设置连接,其中demo为报表数据集中指定数据源名称,context.getConnectionFactory(ds).getConnection()根据传入的ds参数名,从raqsoftConfig.xml中获取数据源链接
    4. session.setAttribute("dsname",context);//将环境对象放到session中,名字为dsname
    在jsp的tag标签(report:html)中增加标签:
    
    contextName="dsname"

    这样,报表就能通过 url 上 ds 参数的值动态从不同数据源中取数。

    更多复杂计算相关问题请查看:复杂计算相关问题分类导航

     

  • 相关阅读:
    Linux学习——exec函数族和守护进程
    L-丙氨酸甲酯氯铝酸盐离子液体(L-AlaC1Cl/AlCl3)/氯铁酸盐离子液体(L-AlaC1Cl/FeCl3)
    值类型与引用类型
    C++学习day4
    递归算法深入解析
    王庆友-架构的本质:如何打造一个有序的系统?
    自动驾驶感知算法实战2——车载相机及图像处理
    win安装vscode
    Redis-02
    【第八章 死锁、lock锁、synchronized和lock的异同、线程通信、sleep()和wait()的异同】
  • 原文地址:https://blog.csdn.net/raqsoft/article/details/126117045