如何使我的子报表访问与主要数据库不同的数据库?

时间:2015-07-24 08:21:33

标签: jasper-reports

我正在评估JasperReports和Jaspersoft Studio在我工作的公司中使用,我正在尝试构建一个包含来自2个不同数据库的信息的报告。

我配置了2个数据适配器。

我的研究结果发现,唯一的方法是在主报告中包含列表,表格或子报表,但我仍然无法使其正常工作。

我采用了子报表方法,我有两个单独工作的报表,主要是在示例DB中执行此查询

select 1 from ORDERS limit 10

子报表在我拥有的Vertica数据库中运行这个:

select 1 from my_schema.my_table limit 10

如上所述,他们两人分开运作。

所以我转到mainreport并将一个SubReport元素添加到ColumnHeader band,然后向导打开:

  • 在步骤1中,我从项目中选择子报告
  • 第二步是连接。我有这些选择:
    • 相同的JDBC连接
    • 使用其他连接
    • 使用空数据源
    • 使用JRDatasourceExpression
    • 不要使用任何连接。

第一个和第三个不是我想要的。

我尝试设置第二个,但我找不到一种方法来选择我配置的数据适配器。

最后一个不起作用(我收到一条消息说my_schema不存在,所以我认为它仍在尝试访问MainReport数据库。)

无论如何,我可以让子报表在主报表的不同数据库/数据源中运行查询吗?

3 个答案:

答案 0 :(得分:1)

如果有人遇到同样的问题,我可以总结一下我的所作所为:

我做了概念证明(因此我没有代码了),但是我使用this tutorial创建了一个JRDataSource类,然后我手动访问数据库并返回行。然后我用它作为我的子报表/表的数据源。 不像我想的那么好,但有可能

答案 1 :(得分:0)

我猜this iReport文章也适用于jaspersoft studio设计的报告;您只需要使用给定的表达式定义子报表连接参数。

答案 2 :(得分:0)

也许,您可以自己从主报告中定义的两个参数寻求帮助。如:

  1. $ P {MySubreport},类型为net.sf.jasperreport.engine.JasperReport;

  2. $ P {MyDatasource},类型为net.sf.jasperreport.engine.JRDataSource;

  3. 将这两个参数分别与属性“表达式”和“数据源表达式”中的子报表元素相关联;

  4. 请编写实现接口JRDataSource的DataSource类。 然后,在servlet类中,将实际参数值(JasreReport用于子报表.jasper文件和DataSource对象)放入参数Map对象,并调用JasperFillManager.fillReport()