我贴一个偶写的连接池(一半是吵的,哈哈)
import java.sql.*;
import java.io.*;
import java.util.*;
import com.evoln.tool.*;public class ConnectionPool 
{
static private ConnectionPool instance;  //生成本类的唯一实例
private int client;
private String userName;
private String passWord;
private Vector freeConn = new Vector();
private String dbURL;
private int maxConn;
private PrintWriter logPw; /**
 *返回该类的唯一实例,如没有,则创建
 **/
static synchronized public ConnectionPool getInstance()
{
if(instance == null)
{
instance = new ConnectionPool();
}
return instance;
}

private ConnectionPool()
{
super();
String logfile = com.evoln.tool.file.getValue("REGISTER_LOGFILE");
userName = com.evoln.tool.file.getValue("DB_USERNAME");
passWord = com.evoln.tool.file.getValue("DB_PASSWORD");
dbURL = com.evoln.tool.file.getValue("DB_URL");
try
{
maxConn = Integer.parseInt(com.evoln.tool.file.getValue("DB_MAXCONN"));
}
catch(NumberFormatException e)
{
log("error in format number",e);
}
try
{
logPw = new PrintWriter(new FileWriter(logfile,true),true);
}
catch(IOException ioException)
{
com.evoln.tool.file.PrintMessage("ConnectionPool.java","ConnectionPool","ConnectionFile",ioException.toString());
}
loadDrivers();
}

private void loadDrivers()
{
String driverName = com.evoln.tool.file.getValue("DRIVER_NAME");
try
{
Driver driver = (Driver)Class.forName(driverName).newInstance();
DriverManager.registerDriver(driver);
log("success in register driver: " + driverName);
}
catch(Exception e)
{
log("error in register driver: " + driverName,e);
}
}

private void log(String message)
{
logPw.println(datetime.DateToStr() + " " + datetime.TimeToStr() + ": " + message);
} private void log(String message,Throwable e)
{
logPw.println(datetime.DateToStr() + " " + datetime.TimeToStr() + ": " + message + " " + e.toString()); 
}

//将不在使用的连接返回连接池
public synchronized void freeConnection(Connection conn)
{
freeConn.addElement(conn);
client--;
notifyAll();
}

//从连接池中得到一个连接
public synchronized Connection getConnection()
{
Connection conn = null;
if(freeConn.size() > 0)
{
conn = (Connection)freeConn.firstElement();
freeConn.removeElementAt(0);
try
{
if(conn.isClosed())
{
conn = getConnection();
log("delete a connection from pool");
}
}
catch(SQLException sqlException)
{
conn = getConnection();
log("error in delete a connection from pool",sqlException);
}
}
else if(client < maxConn)
{
conn = this.newConnection();
}
if(conn != null)
{
client++;
}
return conn;
}

public synchronized Connection getConnection(long timeout)
{
long startTime = new java.util.Date().getTime();
Connection conn;
while((conn = getConnection()) == null)
{
try
{
wait(timeout);
}
catch(InterruptedException e)
{}
if((new java.util.Date().getTime() - startTime) >= timeout)
{
return null;
}
}
return conn;
}

private Connection newConnection()
{
Connection conn = null;
try
{
if(userName.equals(null))
{
conn = DriverManager.getConnection(dbURL);
}
else
{
conn = DriverManager.getConnection(dbURL,userName,passWord);
}
}
catch(SQLException sqlException)
{
log("error in create new connection " ,sqlException);
}
return conn;
}

public synchronized void closeAllConn()
{
Enumeration allConn = freeConn.elements();
while(allConn.hasMoreElements())
{
Connection conn = (Connection)allConn.nextElement();
try
{
conn.close();
}
catch(SQLException sqlException)
{
log("error in close connection ",sqlException);
}
}
}
}