public class ConnPool {
private static ComboPooledDataSource condb;
static {
try {
condb = new ComboPooledDataSource();
condb.setDriverClass("oracle.jdbc.driver.OracleDriver");
condb.setJdbcUrl("jdbc:oracle:thin:@192.168.3.19:1521:ora9i");
condb.setUser("crm");
condb.setPassword("crm");
condb.setAcquireIncrement(3);
condb.setMaxPoolSize(100);
condb.setMinPoolSize(2);
condb.setInitialPoolSize(3);
condb.setAcquireRetryDelay(1000); } catch (Exception ex) {
System.err.print("获取连接池出现异常");
ex.printStackTrace();
}
} public static Connection getConn() {
try {
return condb.getConnection();
} catch (SQLException e) {
System.err.print("获取连接出现异常");
e.printStackTrace();
return null;
}
}
我这样写了一个类,A.java
A用到连接的时候 这样写public class a{
public a_method(){
ConnPool cp=new ConnPool()
Connection c= cp.getConn();
}
}上面这样写是不是当每次new一个A的实例时就创建一个连接池啊? 这样肯定是不行的吧?若这样写public class a extends ConnPool
{
public a_method(){
Connection c= getConn();
}
}这样的效果和上面的相同吗? 还一种是这样
public class a
{
public a_method(){
Connection c= ConnPool.getConn();
}
}
上面三种方法,那种是错误和不可行的呢
或者都不行的话请大家给点建议哈最后一个问题是 如果频繁建立新的连接池
是不是有可能导致web服务器崩溃啊?

解决方案 »

  1.   

    无论你new多少个ConnPool,它的 condb只会有一个。
    楼主可以看下单实例的代码
    防止对象为空并做好同步就可以了。分数拿来
      

  2.   

    因为你第一次new之前,已经把ConnPool 装载了,并且执行一次静态快代码,但你第二次new的时候不再执行静态代码快。
    所以每次调用连接池是一样的!
      

  3.   

    第二和第三种方法其实是一样的,在这里继承没有起到实质性的作用,因为你没有调用父类的数据和方法第一种方法肯定是不行的,以为 Connection是一个方法,而不是一个类,介意楼主利用内部类调用比较快,且方便public static class Connection {
    public static getConn(){
    try {
                return condb.getConnection();
            } catch (SQLException e) {
                System.err.print("获取连接出现异常");
                e.printStackTrace();
                return null;
            }

    }