Java实现连接池

package model;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Enumeration;
import java.util.Vector;
/**@author mj
*/
public class ConnectionPool {
	//
	private static final ConnectionPool pool=new ConnectionPool();
	//连接池的名字,因为可能会有多个连接池,依靠名字来对他们进行区分,因为现在只有一个Oracle连接池,所以没什么在用在这里
	private String name;
	//连接字符串
	private String url="jdbc:oracle:thin:wmj/494005678@localhost:1521:WMG";
	//用户名
	private String username="wmj";
	//密码
	private String password="494005678";
	//最大连接数
	private int maxConn=10;
	//当前连接数
	private int curConn=0;
	//空闲的连接
	private Vector<Connection> freeConns=new Vector<Connection>();
	//私有的构造函数
	private ConnectionPool(){
		
	}
	//获得一个对象实例
	public static ConnectionPool getConnPool(){
		return pool;
		
	}
	//获得一个连接,如果没有空闲连接并且当前连接数小于最大连接数,就创建一个连接
	public synchronized Connection getConn(){
		Connection conn=null;
		if(freeConns.size()>0){
			//得到空闲连接里面第一个连接
			conn=freeConns.firstElement();
			freeConns.removeElementAt(0);
			try {
				//如果得到的这个连接失效了,就释放掉他,然后重新递归的调用本方法
				if(conn.isClosed()){
					conn=getConn();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
			//如果现在没有空闲连接,并且当前连接数小于最大连接数,就新创建一个连接
		}else if(curConn<maxConn){
			conn=newConn();
		}
		if(conn!=null){
			curConn++;
		}
		
		return conn;
	}
	//创建新的连接
	private Connection newConn(){
		Connection conn=null;
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn=DriverManager.getConnection(url,username,password);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return conn;
	}
	//释放一个连接
	public  synchronized void freeConn(Connection conn) {
		freeConns.addElement(conn);
		curConn--;
		notifyAll();
	}
	//关闭所有连接
	public void freeAllConns(){
		Enumeration<Connection> conns=freeConns.elements();
		while(conns.hasMoreElements()){
			Connection conn=conns.nextElement();
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		//除去空闲连接当中的所有连接
		freeConns.removeAllElements(); 

	}
}

你可能感兴趣的:(java,oracle,sql,jdbc)