[BIRT]-[Tutorial]-使用ScriptDataSet从POJO中获得数据(一)

在前面说明过使用Script数据源来获得web service数据源的做法,在实际操作中,发现虽然有BIRT的帮助文件,但同事对BIRTScript数据源的使用还是不太理解,于是写出下文以便帮助使用BIRT的高级特性

<o:p> </o:p>

熟悉了BIRTScript数据源之后,你会感叹BIRT功能之强大,BIRT团队承诺在2.0中加入对数据库连接池的支持,但目前为止,我们还只能通过Script数据源来支持连接池。

<o:p> </o:p>

为了能够自定义数据集合以及支持分页查询、多表查询、数据库连接池或者在DAO中使用Spring+Hibernate或从web Service获取数据等高级特性,我们需要使用BIRTScript数据源来获得数据

下面通过一个示例说明如何使用BIRTScript数据源来通过POJO获取数据:

<o:p> </o:p>

注:<o:p></o:p>

为了使例子不至于因为过于简单而无法说明情况(如同BIRTTutorial那样),在这里我使用了一个简单但完整的DAO层,可直接在项目中使用,同时也为避免过于复杂,本例中没有使用Spring+HibernateWeb Service获得数据源,但从POJO中可很简单的将其改为SH组合或WS
<o:p>

一、一个简单的数据库访问层

<o:p> </o:p>

在开始我们浪费些时间来描述一下DAO层的几个类,以便后面在BIRT中使用它时有所了解。

首先在Eclipse中建立一个Tomcat项目,然后在src中建立一个com.bat.afp.DAOComm包用来封装一个非常简单的DAO类,如下:

<v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype>

o_1.jpg
其中DBUtil为数据库连接类(数据库为Oracle8),使用了DBCP作为数据库连接池,并使用XML文件(dbconfig.xml)来配置数据库连接池的信息

<o:p> </o:p>

DBUtil代码如下:

  1 None.gif package com.bat.afp.DAOComm;
  2 None.gif
  3 None.gifimport java.io.File;
  4 None.gifimport java.net.URL;
  5 None.gifimport java.sql.Connection;
  6 None.gifimport java.sql.DriverManager;
  7 None.gifimport java.sql.SQLException;
  8 None.gifimport org.apache.commons.dbcp.DriverManagerConnectionFactory;
  9 None.gifimport org.apache.commons.dbcp.PoolableConnectionFactory;
 10 None.gifimport org.apache.commons.dbcp.PoolingDriver;
 11 None.gifimport org.apache.commons.pool.impl.GenericObjectPool;
 12 None.gifimport org.apache.log4j.BasicConfigurator;
 13 None.gifimport org.apache.log4j.Logger;
 14 None.gifimport org.dom4j.Document;
 15 None.gifimport org.dom4j.DocumentException;
 16 None.gifimport org.dom4j.Element;
 17 None.gifimport org.dom4j.io.SAXReader;
 18 None.gif
 19 ExpandedBlockStart.gifContractedBlock.gif /**/ /**
 20InBlock.gif * @author liuyf
 21ExpandedBlockEnd.gif */

 22 ExpandedBlockStart.gifContractedBlock.gif public   class  DBUtil  dot.gif {
 23InBlock.gif
 24InBlock.gif    private static final Logger    logger        = Logger.getLogger(DBUtil.class);
 25InBlock.gif
 26InBlock.gif    private static DBUtil        instance;
 27InBlock.gif
 28InBlock.gif    private GenericObjectPool    connectionPool;
 29InBlock.gif
 30InBlock.gif    private static String        dbUrl;
 31InBlock.gif
 32InBlock.gif    private static String        user;
 33InBlock.gif
 34InBlock.gif    private static String        password;
 35InBlock.gif
 36InBlock.gif    private static int            connNumber    = 10;
 37InBlock.gif    static
 38ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
 39InBlock.gif        BasicConfigurator.configure();
 40InBlock.gif        try
 41ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 42InBlock.gif            readConfig();
 43ExpandedSubBlockEnd.gif        }

 44InBlock.gif        catch (DocumentException e)
 45ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 46InBlock.gif            e.printStackTrace();
 47ExpandedSubBlockEnd.gif        }

 48ExpandedSubBlockEnd.gif    }

 49InBlock.gif
 50InBlock.gif    private DBUtil()
 51ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
 52InBlock.gif        try
 53ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 54InBlock.gif            initConnectionPool();
 55ExpandedSubBlockEnd.gif        }

 56InBlock.gif        catch (SQLException e)
 57ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 58InBlock.gif            e.printStackTrace();
 59ExpandedSubBlockEnd.gif        }

 60InBlock.gif        logger.debug("DBUtil initdot.gif");
 61ExpandedSubBlockEnd.gif    }

 62InBlock.gif
 63ExpandedSubBlockStart.gifContractedSubBlock.gif    /**//**
 64InBlock.gif     * 读取配置文件
 65InBlock.gif     * 
 66InBlock.gif     * @throws DocumentException
 67ExpandedSubBlockEnd.gif     */

 68InBlock.gif    private static void readConfig() throws DocumentException
 69ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
 70InBlock.gif        URL url = DBUtil.class.getClassLoader().getResource("dbconfig.xml");
 71InBlock.gif        File file = new File(url.getFile());
 72InBlock.gif        // File file = new File("dbconfig.xml");
 73InBlock.gif        SAXReader reader = new SAXReader();
 74InBlock.gif        Document document = reader.read(file);
 75InBlock.gif        Element root = document.getRootElement();
 76InBlock.gif        Element dbinfo = root.element("dbinfo");
 77InBlock.gif        dbUrl = dbinfo.elementText("url");
 78InBlock.gif        user = dbinfo.elementText("user");
 79InBlock.gif        password = dbinfo.elementText("pwd");
 80InBlock.gif        String numStr = dbinfo.elementText("connNumber");
 81InBlock.gif        if (numStr != null)
 82InBlock.gif            connNumber = Integer.parseInt(numStr);
 83ExpandedSubBlockEnd.gif    }

 84InBlock.gif
 85InBlock.gif    public static DBUtil getInstance()
 86ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
 87InBlock.gif        if (instance == null)
 88InBlock.gif            return instance = new DBUtil();
 89InBlock.gif        else
 90InBlock.gif            return instance;
 91ExpandedSubBlockEnd.gif    }

 92InBlock.gif
 93ExpandedSubBlockStart.gifContractedSubBlock.gif    /**//**
 94InBlock.gif     * 
 95ExpandedSubBlockEnd.gif     */

 96InBlock.gif    private void initConnectionPool() throws SQLException
 97ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
 98InBlock.gif        DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
 99InBlock.gif        connectionPool = new GenericObjectPool(null, connNumber);
100InBlock.gif        DriverManagerConnectionFactory connectionFactory = new DriverManagerConnectionFactory(dbUrl, user,
101InBlock.gif                password);
102InBlock.gif        PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(
103InBlock.gif                connectionFactory, connectionPool, nullnullfalsetrue);
104InBlock.gif        PoolingDriver driver = new PoolingDriver();
105InBlock.gif        driver.registerPool("afpdb", connectionPool);
106ExpandedSubBlockEnd.gif    }

107InBlock.gif
108InBlock.gif    public Connection getConnection() throws SQLException
109ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
110InBlock.gif        return DriverManager.getConnection("jdbc:apache:commons:dbcp:afpdb");
111ExpandedSubBlockEnd.gif    }

112ExpandedBlockEnd.gif}

113 None.gif
</o:p>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值