⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbconnpool.java

📁 考勤管理系统是针对学校每个月的考勤的报表进行总结
💻 JAVA
字号:
package setting;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Date;
import java.util.Enumeration;
import java.util.Vector;

import action.Log;

/**
 * 数据库连接池。继承了DBConnParam参数类,通过一个池名name
 * 和一个配置文件名configFile创建一个连接池可供使用。
 * 
 * @author Dylin
 * @date 2006-10-3
 * 
 */
public class DBConnPool {
	private String name = ""; //本池名称
	private String ip = "";  //数据服务器ip
	private String port = ""; //端口号
	private String dataname = ""; //连接的数据库
	private String user;     //数据库用户名
	private String password;    //数据库密码
	//private int minConn = 0;  //初始化连接数
	private int maxConn = 50;  //最大连接数
	//private long timeOut = 600000;//连接的最大空闲时间
	//private long waitTime = 30000;  //取连接的时候如果没有可用连接最大的等待时间
	
	private int checkedOut = 0; //已分配的连接个数
	private Vector<Connection> freeConns = 
			new Vector<Connection>(); //空闲连接个数
	
	/**
	 * 创建新的连接池
	 * 
	 * @param name 连接池名字
	 * @param configFile 配置文件位置
	 */
	public DBConnPool(String name, String ip, String port, 
			String dataname, String user, String pw, int min, 
			int max, long timeOut, long waitTime) {
		this.name = name;
		this.ip = ip;
		this.port = port;
		this.dataname = dataname;
		this.user = user;
		this.password = pw;
		//this.minConn = min;
		this.maxConn = max;
		//this.timeOut = timeOut;
		//this.waitTime = waitTime;
	}
	
	/**
	 * 将不再使用的连接返回给连接池
	 * 
	 * @param conn 客户程序释放的连接
	 */
	public synchronized void freeConn(Connection conn) {
		if (conn != null && (conn instanceof Connection)) {
			freeConns.addElement(conn);
			checkedOut --;
			if (checkedOut < 0) {
				checkedOut = 0;
			}
		}
	}
	
	/**
	 * 从连接池获得一个可用连接,如没有空闲的连接且当前连接数小于最大连接
	 * 数限制,则创建新连接,如原来登记为可用的连接不再有效,则从向量删除,
	 * 然后递归调用自己以尝试新的可用连接.
	 * @return Connection 连接
	 */
	public synchronized Connection getConn() {
		Connection conn = null;
		if (freeConns.size() > 0) {
	//获取向量中第一个可用连接
			conn = freeConns.firstElement();
			freeConns.removeElementAt(0);
			try {
				if (conn.isClosed()) {
					Log.writeLog("从连接池" + name + "删除一个无连接!");
	//递归调用自己,尝试再次获取可用连接
					conn = getConn();
				}
			} catch (SQLException e) {
				Log.writeLog("从连接池" + name + "删除一个无效连接!");
	//递归调用自己,尝试再次获取可用连接
				conn = getConn();
			}
		} else if (maxConn ==0 || checkedOut < maxConn){
	//最大池中连接数为0或全部支出
			conn = newConn();
		}
		if (conn != null && (conn instanceof Connection)) {
			checkedOut ++;
		}
		return conn;
	}
	
	/**
	 * 从连接池获取可用连接.可指定客户程序能等待的最长时间
	 * 
	 * @param timeout 以毫秒计的等待时间限制
	 * @return Connection 连接
	 */
	public synchronized Connection getConn(long timeout) {
		long startTime = new Date().getTime();
		Connection conn = null;
		while ((conn = getConn()) == null) {
			try {
				wait(timeout);
			} catch (InterruptedException e) {
				Log.writeLog(startTime + 
						"setting.DBConnPool.getConn:\n\t" +
						"申请连接等待时等待超时!");
			}
			if ((new Date().getTime() - startTime) >= timeout) {
				//wait()返回的原因是超时
				return null;
			}
		}
		return conn;
	}
	
	/**
	 * 关闭所有连接
	 *
	 */
	public synchronized void release() {
		Enumeration<Connection> allConns = freeConns.elements();
		while (allConns.hasMoreElements()) {
			Connection conn = allConns.nextElement();
			try {
				conn.close();
				Log.writeLog("setting.DBConnManager.release:\n\t" +
						"关闭连接池" + name + "中的连接!");
			} catch (SQLException e) {
				Log.writeLog(e, "setting.DBConnManager.release:\n\t" +
						"无法关闭连接池" + name + "中的连接!");
			}
		}
		freeConns.removeAllElements();
	}
	
	/**
	 * 创建新的连接
	 * @return
	 */
	private Connection newConn() {
		Connection conn = null;
		String url = "jdbc:microsoft:sqlserver://" + ip + ":" +
				port + ";DatabaseName=" + dataname;
		try {
			if (user == null) {
				conn = DriverManager.getConnection(url);
			} else {
				System.out.println("url = " +url);
				System.out.println("user = " +user);
				System.out.println("pw = " + password);
				conn = DriverManager.getConnection(url, user, password);
			}
			Log.writeLog("setting.DBConnPool.newConn:\n\t" +
					"连接池" + name + "创建一个新的连接!");
		} catch (SQLException e) {
			Log.writeLog(e, "settion.DBConnPool.newConn:\n\t" +
					"无法创建下列URL的连接:" + url);
			return null;
		}
		return conn;
	}
		
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -