//================= ConnectionBean.java ===================
import java.io.Serializable;
import java.sql.*;
public class ConnectionBean implements java.io.Serializable
  {
  private Connection connection = null;
  private boolean inuse = false;
  public ConnectionBean()
    { }
  public ConnectionBean(Connection value)
    { if (value!=null) connection = value; }
  public Connection getConnection()
    { return connection; }
  public void setConnection(Connection con)
    { connection = con; }
  public void setInuse(boolean value)
    { inuse = value; }
  public boolean getInuse()
    { return inuse; }
  public boolean inUse()
    { return inuse; }
  public void close()
    {
    try
      { connection.close(); }
    catch (SQLException sqle)
      { System.err.println(sqle.getMessage()); }
    }
  }

解决方案 »

  1.   

    //==================== PoolBean.java ======================
    import java.io.Serializable;
    import java.sql.*;
    import java.util.*;
    public class PoolBean implements java.io.Serializable
      {
      private String driver = null;
      private String url = null;
      private int size = 0;
      private String username = new String("");
      private String password = new String("");
      private Vector pool = null;
      public PoolBean() { }
      public void setDriver(String value)
        { if (value!=null) driver=value; }
      public String getDriver()
        { return driver; }
      public void setURL(String value )
        { if (value!=null) url=value; }
      public String getURL()
        { return url; }
      public void setSize(int value)
        { if (value>1) size=value; }
      public int getSize()
        { return size; }
      public void setUsername(String value)
        { if (value!=null) username=value; }
      public String getUserName()
        { return username; }
      public void setPassword(String value)
        { if (value!=null) password=value; }
      public String getPassword()
        { return password; }
      private Connection createConnection() throws Exception
        {
        Connection con = null;
        con = DriverManager.getConnection(url,username,password);
        return con;
        }
      public synchronized void initializePool() throws Exception
        {
        if (driver==null)
          throw new Exception("No Driver Name Specified!");
        if (url==null)
          throw new Exception("No URL Specified!");
        if (size<1)
          throw new Exception("Pool size is less than 1!");
        try
          {
          Class.forName(driver);
          for (int x=0; x<size; x++)
            {
            Connection con = createConnection();
            if (con!=null)
              {
              ConnectionBean pcon = new ConnectionBean(con);
              addConnection(pcon);
              }
            }
          }
        catch (Exception e)
          {
          System.err.println(e.getMessage());
          throw new Exception(e.getMessage());
          }
        }
      private void addConnection(ConnectionBean value)
        {
        if (pool==null) pool=new Vector(size);
        pool.addElement(value);
        }
      public synchronized void releaseConnection(Connection con)
        {
        for (int x=0; x<pool.size(); x++)
          {
          ConnectionBean pcon =
            (ConnectionBean)pool.elementAt(x);
          if (pcon.getConnection()==con)
            {
            System.err.println("Releasing Connection " + x);
            pcon.setInUse(false);
            break;
            }
          }
        }
      public synchronized Connection getConnection()
      throws Exception
        {
        ConnectionBean pcon = null;
        for (int x=0; x<pool.size(); x++)
          {
          pcon = (ConnectionBean)pool.elementAt(x);
          if (pcon.inUse()==false)
            {
            pcon.setInUse(true);
            return pcon.getConnection();
            }
          }
        try
          {
          Connection con = createConnection();
          pcon = new ConnectionBean(con);
          pcon.setInUse(true);
          pool.addElement(pcon);
          }
        catch (Exception e)
          {
          System.err.println(e.getMessage());
          throw new Exception(e.getMessage());
          }
        return pcon.getConnection();
        }
      public synchronized void emptyPool()
        {
        for (int x=0; x<pool.size(); x++)
          {
          System.err.println("Closing JDBC Connection " + x);
          ConnectionBean pcon =
            (ConnectionBean)pool.elementAt(x);
          if (pcon.inUse()==false)
            pcon.close();
          else
            {
            try
              {
              java.lang.Thread.sleep(30000);
              pcon.close();
              }
            catch (InterruptedException ie)
              {
              System.err.println(ie.getMessage());
              }
            }
          }
        }
      }
      

  2.   

    谢谢了,不过PoolBean.java 里面的inUse()报错,
    因为我不太会,所以不大会改,能在帮忙看看么??
    还有是不是PoolBean.java是连接池程序?
    ConnectionBean.java 是如何连接???
      

  3.   

    上面的是告诉你思路是什么样的。具体的代码你要自己写的,这样才会有提高PoolBean是主连接池程序,ConnectionBean是PoolBean的辅助类。
      

  4.   

    public static Connection getConnectionByDriver() throws MyException
    {
    Connection conn = null;
    try
    {
    Context initCtx = new InitialContext();
    Context ctx = (Context)initCtx.lookup("java:comp/env");
    Object obj = (Object)ctx.lookup("jdbc/OracleDB");
    DataSource ds = (javax.sql.DataSource)obj;
    conn = ds.getConnection();
    }
    catch(SQLException e)
    {
    e.printStackTrace();
    throw new MyException("SQL Error");
    }
    catch(NamingException e)
    {
    e.printStackTrace();
    }
    return conn;
    }