Connection Pooling

Den folgenden Source habe ich mal eben schnell eingehackt und ist daher ungetestet, sollte aber trotzdem funktionieren ;-)
Falls nicht -> Beschwerden bitte an mich
package com.sowas.lib.sql;

import java.sql.*;
import java.util.*;

public class ConnectionPool{
	Vector vPool = new Vector();
	String strDriver, strURLDatabase;
	
	//....................
	
	public ConnectionPool(String strDriver, String strURLDatabase){
		this.strDriver=strDriver;
		this.strURLDatabase=strURLDatabase;
	}
	
	//....................
	
	public Connection getConnection(){
		PoolConnection poolCon;
		for (int c=0; c < vPool.size(); c++)
			if (((PoolConnection)vPool.elementAt(c)).fInUse == false){
				poolCon = (PoolConnection)vPool.elementAt(c);
				poolCon.fInUse=true; 
				return poolCon.con;
			}

		Connection con;
		try{
			Class.forName(strDriver);
			con = DriverManager.getConnection(strURLDatabase);
		}catch (Exception e){
			e.printStackTrace();
			return null;
		}
		
		poolCon = new PoolConnection(con, true);
		vPool.addElement(poolCon);
		return con;
	}

	//....................

	public void closeConnection(Connection con){
		try {
			int c=0;
			while (!((PoolConnection)vPool.elementAt(c)).con.equals(con))
				c++;
			((PoolConnection)vPool.elementAt(c)).fInUse=false;
		} catch (Exception e) {
			e.printStackTrace();
		}	
	}
	//....................
	
}

//====================

class PoolConnection{
	Connection  con;
	boolean		fInUse;
	
	public PoolConnection(Connection con, boolean fInUse){
		this.con=con;
		this.fInUse=fInUse;
	}
}
Die Verwendung der Klasse könnte so aussehen:
ConnectionPool cp = new ConnectionPool("org.gjt.mm.mysql.Driver", "jdbc:mysql://localhost/datenbank");
Connection con = cp.getConnection();
Statement stat = con.createStement();
...
stat.close();
cp.closeConnection(con);
Natürlich kann noch einiges verbesert werden.
Insbesondere sind keine Timeouts berücksichtigt.
Beim Verwenden von Connection Pooling sollten Timeouts aber ohnehin abgeschaltet werden.