我有一种感觉,我在这里遇到了陷入困境的情况,但是我希望至少有人找到解决办法!
我正在处理的BIRT报告的数据库是通过一个名为db的隐藏参数传入的,因此在我的报告的数据源中。所以在Property Binding下,我告诉BIRT使用"jdbc:mysql://localhost/" + params["db"].value
作为JDBC驱动程序URL。这应该使用在浏览器中运行时从URL传入的数据库名称,这是我在网上找到的解决方案,用于在具有不同数据库名称的计算机上运行我们的报告。
我的问题是,在相同的报告参数中,用户必须从来自数据库的公司列表中选择公司。但报告不能填充此列表,因为数据库没有加载,直到我在参数窗口按OK,直到他们选择公司才能完成,呃 - 我发现自己有一个捕获22的情况!
我不知道在这种情况下我想做什么,如何让报告首先加载数据库,然后根据它显示参数屏幕?
答案 0 :(得分:2)
据我所知,我们不能这样做,因为除了级联参数外,BIRT中的两个报告参数之间没有依赖机制。在这种情况下,这意味着当评估“公司”的项目列表时,参数“db”的选定值永远不可用。
因此,应使用不同的方法提供数据库。你有几个选择:
选项1:会话属性(如果您使用应用程序服务器)
将所选数据库存储在用户会话属性中,然后使用以下表达式在JDBC URL的属性绑定中检索它:
reportContext.getHttpServletRequest().getSession().getAttribute("db");
选项2:连接池(如果您使用应用程序服务器) 这应该始终是使用BIRT访问JDBC数据源的最佳方式。我们只需填写数据源中的JNDI URL(参见上面的第一个屏幕)。物理数据库URL和凭据在连接池中的每个应用程序服务器上定义。
访问this article以查看使用BIRT连接池的示例。
选项3:在属性文件中外部化数据库
正如您所提到的,数据库信息也可以在文件中外部化。
请检查this topic,了解如何通过报告资源访问属性文件
选项4:连接个人资料商店
请检查this topic以了解如何定义连接存储
答案 1 :(得分:0)
为了别人的利益在这里回答我自己的问题。此问题的最佳解决方案是使用此stackoverflow线程link中所述的外部连接配置文件属性文件。这对我们来说最初没有用,因为我无法弄清楚如何使报告文件查找属性文件,无论它运行在哪台计算机上。但是我发现在加载/保存属性文件时可以指定绝对路径(对于BIRT 4.4.0,这是在数据源连接配置文件下的浏览按钮旁边的下拉列表中)。这允许在任何计算机上以相同的绝对路径保存文件时读取该文件。
另一个需要注意的重要事项是BIRT有一种奇怪的习惯,即改变它将使用的3种加载数据源的方法中的哪一种。在我们的测试过程中,我们发现如果在使用连接配置文件时我们没有将属性绑定设置留空,BIRT似乎随机选择通过参数加载或通过基于最后编辑的属性文件加载,非常混乱!< / p>
使用参数指定数据库仍然是可能的,它的使用非常有限。到目前为止,它对我们起了作用,因为虽然我们将数据库设置为参数,但始终在JDBC中设置相同的数据库,该报告用于填充公司参数。但我们不再需要手动设置该数据库,现在它将自动加载而没有任何问题(希望!)。