Weblogic下oracle数据库连接池解决办法

最近在作学校教务系统。开发环境为:数据库oracle9i,服务器 Weblogic8.1。为了提高系统性能,我想使用缓冲池技术。查了一些资料,试了几种方法,但都有问题,最后找到一种满意的解决方法。当前缓冲池的解决方案有以下几种:

1、  oracle自带缓冲池类(在oracle.jdbc.pool.*中),直接使用:

具体代码如下:

private ConnectionPool (String ConnectionURL,String UserID,String PassWord) {

            try{

                OracleConnectionPoolDataSource ocpds = new OracleConnectionPoolDataSource();

                ocpds.setURL(ConnectionURL);

                ocpds.setUser(UserID);

                ocpds.setPassword(PassWord);

                poolcon = ocpds.getPooledConnection();

               

                System.out.println("池子创建成功!");

            }

            catch(Exception ex)

            {

                System.err.println("Error in PooledSQL-construct : ");

                ex.printStackTrace(System.err);

            }

     }

但这个程序有点问题,就是如果先后调用getConnection()获得两个连接,后面的连接一旦建立,前面的就会自动关闭,而导致异常,如果只用一个连接则会破坏程序的封装结构。

     比如像这样的程序

ResultSet rs;

XdjwCon xdjwCon=new XdjwCon();

XdjwCon xdjwCon1=new XdjwCon();

try {

String sql="SELECT  us_index FROM users where us_no='chm' ";

rs=xdjwCon.executeQuery(sql);

while ( rs.next()){

out.println( rs.getInt(1));

out.println( "<br>");

}

 

 

rs=xdjwCon1.executeQuery("select comm from SCOTT.EMP where empno=7876");

while(rs.next()){

    out.println( rs.getInt(1)+"___");

    out.println( "<br>");   

}

 

 

}catch (Exception e) {

out.println("错误 !! ERR !" );

}

finally {

    xdjwCon.close();

    xdjwCon1.close();

}

当执行XdjwCon xdjwCon1=new XdjwCon(); 时前面的xdjwCon就会自动关闭。以致后面的rs=xdjwCon.executeQuery(sql);不能执行。

该问题的原因目前还没有搞清楚,可能该类就是这么规定的吧,只能允许一个连接使用。如果有人明白是怎么回事,望不吝赐教。

 

 

2、  使用weblogic自带数据库驱动jDriver,console里配置连接池。

配置的步骤我就不说了,实现代码如下:

private DataSourcePool(String initialContextFactory, String providerUrl, String jndiName) {

             

        Hashtable ht = new Hashtable();

        ht.put(Context.INITIAL_CONTEXT_FACTORY,initialContextFactory);

        ht.put(Context.PROVIDER_URL,providerUrl);

        try{

               

                ctx = new InitialContext(ht);

                ds = (DataSource)ctx.lookup (jndiName);

                System.out.println("datasource池子创建成功!");

            }

            catch(Exception ex)

            {

                System.err.println("Error in PooledSQL-construct : ");

                ex.printStackTrace(System.err);

            }

       }

这样出现一个很怪异的问题,就是用该驱动获得的连接查询数据库,如果整型的值在0-9之间,都会查出来是0。其它的范围没有问题。包括count()之类函数查询出来的也有这种问题,估计是weblogic自带的驱动和oracle不兼容引起的。

 

 

3、  使用oracle自带的数据库驱动,在console下配置连接池。

除了配置时选择的驱动不一样以外,其它一切都不变,这种配置方法目前为止还没有发现问题。

综上所述:在weblogic下配置oracle数据库连接池,目前找到的最和需求的方法就是3、使用oracle自带的数据库驱动,在console下配置连接池。

 

 

ps:本人第一次发原创帖,望多一些指导,少一些口水。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值