报表如何动态切换数据源
在实际应用中,多个数据库中表结构相同,要求报表展示时能动态控制报表从想要的数据库中取数,这个需求实现的方法比较多,最简单的方法是使用集算器脚本方式,在里边直接通过内置的一些函数就可以实现,具体实现可以参考: 动态切换数据源–通过参数实现动态数据源 ](https://c.raqsoft.com.cn/article/1556095184387)
另外一种方式可以通过 api 接口实现,下面主要是介绍下如何通过 api 接口实现报表数据源的动态切换。
一:在报表配置中增加多数据源,例如:
<DB name="demo">
<property name="url" value="jdbc:hsqldb:hsql://127.0.0.1/demo" />
<property name="driver" value="org.hsqldb.jdbcDriver" />
<property name="type" value="13" />
<property name="user" value="sa" />
<property name="password" />
<property name="batchSize" value="1000" />
<property name="autoConnect" value="false" />
<property name="useSchema" value="false" />
<property name="addTilde" value="false" />
<property name="dbCharset" value="UTF-8" />
<property name="clientCharset" value="UTF-8" />
<property name="needTransContent" value="false" />
<property name="needTransSentence" value="false" />
<property name="caseSentence" value="false" />
</DB>
<DB name="demo1">
<property name="url" value="jdbc:hsqldb:hsql://127.0.0.1/demo" />
<property name="driver" value="org.hsqldb.jdbcDriver" />
<property name="type" value="13" />
<property name="user" value="sa" />
<property name="password" />
<property name="batchSize" value="1000" />
<property name="autoConnect" value="false" />
<property name="useSchema" value="false" />
<property name="addTilde" value="false" />
<property name="dbCharset" value="UTF-8" />
<property name="clientCharset" value="UTF-8" />
<property name="needTransContent" value="false" />
<property name="needTransSentence" value="false" />
<property name="caseSentence" value="false" />
</DB>
这里边的 DB name 属性也就是配置的数据源名称,这里配置了两个数据源 demo 和 demo1。
二:制作报表
具体报表制作这里不做具体介绍,按照实际需求制作报表就行,主要是在数据集中指定数据源名称,这里设置成 demo,如图:
三:在显示报表的 jsp 中增加代码,这里使用报表自带的 showReport.jsp
String ds = request.getParameter( "ds" );//数据源名称通过url参数传入,本例中ds值为demo或者demo1
Context context=new Context();//生成运算环境
context.setConnection("demo",context.getConnectionFactory(ds).getConnection());//设置连接,其中demo为报表数据集中指定数据源名称,context.getConnectionFactory(ds).getConnection()根据传入的ds参数名,从raqsoftConfig.xml中获取数据源链接
session.setAttribute("dsname",context);//将环境对象放到session中,名字为dsname
在jsp的tag标签(report:html)中增加标签:
contextName="dsname"
这样,报表就能通过 url 上 ds 参数的值动态从不同数据源中取数。
更多复杂计算相关问题请查看:复杂计算相关问题分类导航