初学Hibernate时,常听到一个叫"连接池"的名字。
Hibernate的数据库连接,就是通过连接池来管理的。
今天自已写了一个连接池,在此与大家分享:
/**
* @author hanson
* 创建时间 2009/07/11 23:00
* 功能描述
* 属性:MAX_CONNECTION_SIZE 连接池最大连接数
* INIT_CONNECTION_SIZE 连接池初始连接数
* CONNECTION_POOL Connection[]连接数组
* CONNECTION_INDEX 当前请求的连接在数组中的下标
*
* 方法:createConnection() 根据初始连接数,创建数据库连接,装在连接数组中
* getConnection() 从连接数组0位置开始取得连接.取出连接后当前下标CONNECTION_INDEX加1指向下一个连接
* 当CONNECTION_INDEX=MAX_CONNECTION_SIZE时,返回空值.表示已经到达最大连接数
* 当CONNECTION_INDEX>=INIT_CONNECTION_SIZE时,创建新的连接,装入连接数组,并将其返回
* returnConnection(Connection con) 返还连接,当前下标先减一,然后将连接放入到连接数组中
*/
package org.lesson1.db;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;public abstract class ConnectionPool {
/** 设置最大连接数 */
public final static int MAX_CONNECTION_SIZE = 10;
/** 当前请求的连接在数组中的索引 */
private static int CONNECTION_INDEX = 0;
/** 初始连接数 */
private final static int INIT_CONNECTION_SIZE = 5;
/** 创建一个个数=最大连接数的连接数组 */
public final static Connection[] CONNECTION_POOL = new Connection[MAX_CONNECTION_SIZE]; static {
createConnection();
} /**
* 取得连接 程序接收到请求时,向连接池请求连接 连接池从连接数组中0位置开始处开始取得一个连接并返回
*/
public static Connection getConnection(){
Connection con = null;
try {
if (CONNECTION_INDEX < MAX_CONNECTION_SIZE){
if (CONNECTION_INDEX>=INIT_CONNECTION_SIZE){
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hbm1","root","");
CONNECTION_POOL[CONNECTION_INDEX] = con;
}else{
con = CONNECTION_POOL[CONNECTION_INDEX];
}
CONNECTION_INDEX++;
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
System.out.println(con == null);
return con;
}
/**
* 归还连接
*
* @param con
*/
public static void returnConnection(Connection con) {
if (con != null) {
//归还连接时,只要控制CONNECTION_INDEX就可以了。
CONNECTION_INDEX--;
}
} /**
* 创建连接 初始的时候,创建连接填满连接数组
*/
private static void createConnection() {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
for (int i = 0; i < INIT_CONNECTION_SIZE; i++) {
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/hbm1", "root", "");
CONNECTION_POOL[i] = con;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace(); }
}}