最近在作学校教务系统。开发环境为:数据库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:本人第一次发原创帖,望多一些指导,少一些口水。