java 数据库连接池 涂鸦模拟

代码现在不全,等待继续补充... ...


 
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;


public class DataBaseUtil {
	private static String driver;
	private static String userName;
	private static  String password;
	private static String database;
	private static List<Connection> DBCP=new ArrayList<Connection>();
	private static int maxConn;
	private static int minConn;
	private static int usedConn;
	private static int maxWait;
	private static DataBaseUtil dbutil;
	
	/**
	 * 私有化构造方法
	 */
	private DataBaseUtil(){}
	
	/**
	 * 在克隆的情况下返回一个本类的对象
	 */
	@Override
	protected Object clone() throws CloneNotSupportedException {
		// TODO Auto-generated method stub
		return dbutil;
	}
	
	/**
	 * 初始化数据库连接池数据,尝试加载驱动,返回类的一个对象
	 * @param driver
	 * 驱动
	 * @param userName
	 * 用户名
	 * @param password
	 * 密码
	 * @param maxConn
	 * 最大连接数
	 * @param minConn
	 * 最小连接数
	 * @param maxWait
	 * 最大等待时间
	 * @return
	 * 类的一个对象
	 * @throws ClassNotFoundException
	 * 数据库驱动加载异常
	 * @throws SQLException 
	 * 数据库连接创建异常
	 */
	public static DataBaseUtil init(String driver,String userName,String password,
			int maxConn,int minConn,int maxWait) throws ClassNotFoundException, SQLException{
		DataBaseUtil.driver=driver;
		DataBaseUtil.userName=userName;
		DataBaseUtil.password=password;
		DataBaseUtil.maxConn=maxConn;
		DataBaseUtil.minConn=minConn;
		DataBaseUtil.maxWait=maxWait;
		Class.forName(DataBaseUtil.driver);
		if(dbutil==null){
			dbutil=new DataBaseUtil();
		}
		dbutil.initMinConn();
		return dbutil;
	}
	/**
	 * 创建新的数据库连接
	 * @return
	 * 返回一个数据库新建的连接
	 * @throws SQLException 
	 * 数据库连接创建异常
	 */
	private Connection createNewConn() throws SQLException{
		Connection con=null;
		con=DriverManager.getConnection(database, userName, password);
		return con;
	}
	/**
	 * 初始化最小连接数,并把连接放到连接池中
	 * @throws SQLException
	 * 数据库连接创建异常
	 */
	private void initMinConn() throws SQLException{
		if(DataBaseUtil.minConn==0){
			//add no operations here
		}else if(DataBaseUtil.minConn>0){
			for(int i=0;i<DataBaseUtil.minConn;i++){
				DataBaseUtil.DBCP.add(dbutil.createNewConn());
			}
		}else{
			//NOTE:minConn >=0
		}
	}
	
	/**
	 * 获取数据库连接
	 * @return
	 * 数据库连接
	 * @throws SQLException
	 * 数据库连接创建异常
	 */
	public static synchronized Connection getConnection() throws SQLException{
		Connection conn=null;
		if(DataBaseUtil.DBCP.size()>0){
			conn=DataBaseUtil.DBCP.get(0);
			usedConn+=1;
		}else if(maxConn>0&&usedConn<maxConn){
			conn=dbutil.createNewConn();
			usedConn+=1;
		}else{
			//add timer and conn=null operations here
		}
		return conn;
	}
	/**
	 * 释放掉使用的连接
	 * @param c
	 * 使用完毕的数据库连接
	 */
	public static void freeConnection(Connection c){
		//add Connection error and exception operations here
		DataBaseUtil.DBCP.add(c);
		usedConn-=1;
	}
	


}
模拟的,有不完善的地方,请不要copy,出错不负责任。

你可能感兴趣的:(java 数据库连接池 涂鸦模拟)