首先发点牢骚,不知道birt为什么这么设计,要新建jdbc数据源,然后填写一些连接数据库信息,之后你可以读取配置文件的信息。
我晕,我以为使用脚本数据源,折腾半天不显示结果,也没错误。鄙视一下birt这样设计,按说我读取配置文件还要先建个jdbc数据源干什么呢?
好了,牢骚发完了,看一下怎么写了。
首先设置配置文件db.properties,我这里为了方便直接放在c盘目录下了。
db.properties内容如下:
driver=net.sourceforge.jtds.jdbc.Driver
url=jdbc:jtds:sqlserver://localhost:1433/pubs
userid=sa
password=pass
我创建jdbc写的url连的数据库是northwind
在新建的数据源beforeopen里写:
importPackage( Packages.java.io );
importPackage( Packages.java.util );
fin = new java.io.FileInputStream("c:\\db.properties");
props = new java.util.Properties( );
props.load(fin);
this.setExtensionProperty("odaURL", props.getProperty("url"));
this.setExtensionProperty("odaDriverClass", props.getProperty("driver"));
this.setExtensionProperty("odaUser", props.getProperty("userid"));
this.setExtensionProperty("odaPassword", props.getProperty("password"));
fin.close();
然后新建数据集,sql 如下:
select * from jobs
(jobs表位于pubs下,而不是northwind下)。
预览显示数据,说明数据源应用了script里读取配置文件里连接的pubs数据库。
顺便说一下
如果是web应用的话,可能使用下面的操作:
importPackage( Packages.java.io,Packages.java.util,Packages.java.net );
//导入java类
importPackage( Packages.javax.servlet.http );
req = reportContext.getHttpServletRequest( );
//得到HttpServletRequest对象
propPath = new String("WEB-INF/db.Properties");
if ( propPath.charAt(0) != "/" )
propPath = "/" + propPath;
url = req.getSession( ).getServletContext( ).getResource( propPath );
//得到相对路径下的URL
if ( url != null ) { props = new java.util.Properties( );
//得到Properties对象
props.load( url.openStream( ) );
// 从URL构建的输入流中读取属性列表(键和元素对)
extensionProperties.odaURL = new String(props.getProperty("url"));
//为birt数据源属性赋值
extensionProperties.odaDriverClass = new String(props.getProperty("driver"));
extensionProperties.odaUser = new String(props.getProperty("userid"));
extensionProperties.odaPassword = new String(props.getProperty("password")); }
这是别人写的一个方法,但是要注意,这里的代码在设计器里运行是会出错的,因为req.getSession()这里req为null,
req是req = reportContext.getHttpServletRequest( );这里得来的,但是没有在web应用,没有请示,这里取得的request为空。
所以写好代码后应放到web容器里从页面请求测试。
我晕,我以为使用脚本数据源,折腾半天不显示结果,也没错误。鄙视一下birt这样设计,按说我读取配置文件还要先建个jdbc数据源干什么呢?
好了,牢骚发完了,看一下怎么写了。
首先设置配置文件db.properties,我这里为了方便直接放在c盘目录下了。
db.properties内容如下:
driver=net.sourceforge.jtds.jdbc.Driver
url=jdbc:jtds:sqlserver://localhost:1433/pubs
userid=sa
password=pass
我创建jdbc写的url连的数据库是northwind
在新建的数据源beforeopen里写:
importPackage( Packages.java.io );
importPackage( Packages.java.util );
fin = new java.io.FileInputStream("c:\\db.properties");
props = new java.util.Properties( );
props.load(fin);
this.setExtensionProperty("odaURL", props.getProperty("url"));
this.setExtensionProperty("odaDriverClass", props.getProperty("driver"));
this.setExtensionProperty("odaUser", props.getProperty("userid"));
this.setExtensionProperty("odaPassword", props.getProperty("password"));
fin.close();
然后新建数据集,sql 如下:
select * from jobs
(jobs表位于pubs下,而不是northwind下)。
预览显示数据,说明数据源应用了script里读取配置文件里连接的pubs数据库。
顺便说一下
如果是web应用的话,可能使用下面的操作:
importPackage( Packages.java.io,Packages.java.util,Packages.java.net );
//导入java类
importPackage( Packages.javax.servlet.http );
req = reportContext.getHttpServletRequest( );
//得到HttpServletRequest对象
propPath = new String("WEB-INF/db.Properties");
if ( propPath.charAt(0) != "/" )
propPath = "/" + propPath;
url = req.getSession( ).getServletContext( ).getResource( propPath );
//得到相对路径下的URL
if ( url != null ) { props = new java.util.Properties( );
//得到Properties对象
props.load( url.openStream( ) );
// 从URL构建的输入流中读取属性列表(键和元素对)
extensionProperties.odaURL = new String(props.getProperty("url"));
//为birt数据源属性赋值
extensionProperties.odaDriverClass = new String(props.getProperty("driver"));
extensionProperties.odaUser = new String(props.getProperty("userid"));
extensionProperties.odaPassword = new String(props.getProperty("password")); }
这是别人写的一个方法,但是要注意,这里的代码在设计器里运行是会出错的,因为req.getSession()这里req为null,
req是req = reportContext.getHttpServletRequest( );这里得来的,但是没有在web应用,没有请示,这里取得的request为空。
所以写好代码后应放到web容器里从页面请求测试。