这个是别人写的,你试一试
import java.sql.*;
import java.util.*;public class ConnBean {
  private int inUse=0;
  private Vector connections=new Vector();
  private String poolname;
  private String dbid;
  private String drivername;
  private String username;
  private String passwd;
  private int maxconn;
  public ConnBean(String poolname,String dbid,String drivername,
                 String username,String passwd,int maxconn) {
    this.poolname=poolname;
    this.dbid=dbid;
    this.drivername=drivername;
    this.username=username;
    this.passwd=passwd;
    this.maxconn=maxconn;
   }
   public synchronized void releaseConn(Connection conn){
     connections.addElement(conn);
     inUse--;
   }
   public synchronized Connection getConn(){
     Connection con=null;
     if(connections.size()>0){
       con=(Connection)connections.elementAt(0);
       connections.removeElementAt(0);
       try {
             if (con.isClosed())
                con = getConn();
          }
          catch (Exception ex) {
             ex.printStackTrace();
          }
}
     else if(maxconn==0||inUse<maxconn){
       con=newConn();
     }
     if(con!=null){
       inUse++;
     }
     return con;
   }
   private Connection newConn(){
     Connection con=null;
     try{
       Class.forName(drivername).newInstance();
       con=DriverManager.getConnection(dbid,username,passwd);
      }
      catch(Exception e){
        e.printStackTrace();
        return null;
      }
      return con;
   }
   public synchronized void closeconn(){
     Enumeration allConnections=connections.elements();
     while(allConnections.hasMoreElements()){
       Connection con=(Connection) allConnections.nextElement();
       try{
         con.close();
       }
       catch(SQLException e){
         e.printStackTrace();
       }
     }
     connections.removeAllElements();
   }
}//管理连接池import java.sql.*;
import java.util.*;public class ConnManager {
  private Vector poolnames=new Vector();
  private Vector drivernames=new Vector();
  private Vector dbids=new Vector();
  private Vector usernames=new Vector();
  private Vector passwds=new Vector();
  private Vector maxcons=new Vector();
  private Hashtable connPools=new Hashtable();
  public ConnManager() {
   //在这里创建不同类型数据库的连接池,只需在这里重写下面的代码,比如SQLSERVER,ORACLE, ACCESS,MYSQL
    poolnames.addElement("连接池名");
    drivernames.addElement("JDBC驱动");
    dbids.addElement("url");
    usernames.addElement("用户名");
    passwds.addElement("密码");
    maxcons.addElement("最大连接数");
    createPools();
  }
  public void realeaseConn(String name,Connection con){
    ConnBean pool=(ConnBean)connPools.get(name);
    if(pool!=null)
      pool.releaseConn(con);
  }
  public Connection getConn(String name){
   ConnBean pool=(ConnBean)connPools.get(name);
   if(pool!=null)
     return pool.getConn();
   return null;
  }
  public synchronized void closeConn(){
    Enumeration allPools=connPools.elements();
    while(allPools.hasMoreElements()){
      ConnBean pool=(ConnBean)allPools.nextElement();
      pool.closeconn();
    }
  }
  private void createPools(){
    for(int i=0;i<poolnames.size();i++){
      String poolname=poolnames.elementAt(i).toString();
      String drivername=drivernames.elementAt(i).toString();
      String dbid=dbids.elementAt(i).toString();
      String username=usernames.elementAt(i).toString();
      String passwd=passwds.elementAt(i).toString();
      int maxconn=0;
      try{
        maxconn=Integer.parseInt(maxcons.elementAt(i).toString());
      }
      catch(NumberFormatException e){
        e.printStackTrace();
      }
      ConnBean pool=new ConnBean(poolname,dbid,drivername,username,passwd,maxconn);
      connPools.put(poolname,pool);
    }
  }
}

解决方案 »

  1.   

    您的位置:首页> 程序设计 
    利用Oracle自带的连接池类的一例 献花给本文 投掷臭鸡蛋 
    利用Oracle自带的连接池类的一例 /** 
    封装了对数据库的连接,用于处理SQL语句。 
    @author:yancheng(sharetop studio) 
    @version:1.0.0 
    */ 
    package DBUtil; import java.sql.*; 
    import java.io.*; 
    import javax.sql.*; 
    import javax.naming.*; 
    import oracle.jdbc.pool.*; public class OraPooledSQL 
    { private PooledConnection dbpool; /** 
    @param ConnectionURL 连接名 如: jdbc:odbc:myODBC 
    @param UserID 用户名 
    @param PassWord 用户密码 
    */ 
    public OraPooledSQL(String ConnectionURL,String UserID,String PassWord) 
    { try{ OracleConnectionPoolDataSource ocpds = new OracleConnectionPoolDataSource(); ocpds.setURL(ConnectionURL); ocpds.setUser(UserID); ocpds.setPassword(PassWord); dbpool = ocpds.getPooledConnection(); } 
    catch(Exception ex) 

    System.err.println("Error in PooledSQL-construct : "); 
    ex.printStackTrace(System.err); 
    } }//end OraPooledSQL //close dbpool 
    protected void finalize() 

    if( dbpool != null ) 

    try 

    dbpool.close(); 

    catch(Exception ex) 



    } /** 
    用于更新、添加或删除的SQL语句 
    @param SQL SQL语句字串,如:insert into tablename values(id,......) 
    */ 
    public int Update(String SQL) 

    Statement stmt = null; 
    int rc = 0; Connection connection = null; try 

    connection = dbpool.getConnection(); 
    stmt = connection.createStatement(); 
    rc = stmt.executeUpdate(SQL); 
    } catch( Exception ex ) 

    System.err.println("Error in Update - OraPooledSQL : "); 
    ex.printStackTrace(System.err); 
    } return rc; } //end Update() 
    /** 
    用于查询的SQL语句 
    @param SQL SQL语句字串,如:select * from tablename 
    */ 
    public ResultSet Query(String SQL) 

    Statement stmt = null; 
    ResultSet rs = null; 
    Connection connection = null; try 

    connection = dbpool.getConnection(); 
    stmt = connection.createStatement(); 
    rs = stmt.executeQuery(SQL); 
    } catch( Exception ex ) 

    System.err.println("Error in Query - SQLBean : "); 
    ex.printStackTrace(System.err); 
    } return rs; } //end Query } //end Class 
     
    加入时间:2002-07-12; 阅读次数:815 
    关闭窗口 在线调查 | 联系方式 | 版权声明 | 合作伙伴 | 友情链接 
    JavaCool版权所有 &copy;2001-2002
      

  2.   

    楼上的,你用的是oracle自带的连接池,请问与自己编写的优劣性如何?
      

  3.   

    给个链接,可以学习下:
    http://www-900.ibm.com/developerWorks/cn/education/java/j-jdbc/tutorial/index.html