package model;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Logger;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
import unit.FX;
/**
* DbcpManager
* 是数据库连接池的总管理类
* 封装了对于连接池的相关操作
*
* @author 集成显卡
* 2010.9.11
*/
public class DbcpManager {
protected static Logger log=Logger.getLogger("DbcpManager:");
//连接数据库的相关参数
private static String driver="com.mysql.jdbc.Driver";
/*
url="jdbc:mysql://localhost:3306/question?useUnicode=true&characterEncoding=GBK",
user="root",
password="19891231";
*/
//数据源
private static BasicDataSource basicDS=null;
//当前的连接数
private static int linkNum=0;
/*
* 私人构造函数
*/
private DbcpManager(){
}
/**
* static 语句
* 实例basicDS
*/
static{
basicDS=initDataSource(FX.url,FX.username,FX.password);
}
/**
* 初始DataSource
* @param Url
* @param Name
* @param Password
* @return BasicDataSource
*/
protected static BasicDataSource initDataSource(String Url,String Name,String Password){
BasicDataSource tempDS=new BasicDataSource();
tempDS.setDriverClassName(driver);
tempDS.setUrl(Url);
tempDS.setUsername(Name);
tempDS.setPassword(Password);
tempDS.setMaxIdle(20);//池里不会被释放的最多空闲连接数量。设置为0时表示无限制。
tempDS.setMinIdle(5);
tempDS.setMaxActive(100);//同一时间可以从池分配的最多连接数量。设置为0时表示无限制。
tempDS.setMaxWait(3000);
tempDS.setInitialSize(10);//池启动时创建的连接数量
tempDS.setRemoveAbandoned(true);
tempDS.setRemoveAbandonedTimeout(6);// 当空闲连接耗尽,超过这个时间(秒),就会释放未关闭的连 接
log.info("BasicDataSource配置成功");
return tempDS;
}
/**
* 断开DataSource
* @param
* @return
*/
protected static void destoryDataSource(){
try{
basicDS.close();
}
catch(Exception e){
e.printStackTrace();
}
basicDS=null;
log.info("DataSource destoryed-----OK");
}
/**
* 返回DataSource
* @return
*/
public static DataSource getDataSource(){
return basicDS;
}
/**
* 取得一个Connection
* 当已经是最大连接限制时warn
*
* @return
*/
public static Connection getConnection(){
try{
//取得当前连接数
linkNum=basicDS.getNumActive();
if(linkNum==basicDS.getMaxActive()){
log.warning("达到了连接上限。");
}
log.info("返回Connection成功,当前连接数:"+(linkNum+1));
return basicDS.getConnection();
}
catch(Exception e){
e.printStackTrace();
return null;
}
}
/**
* 释放Connection
* @param con
*/
public static void freeConnection(Connection con){
if(con!=null){
try{
con.close();
}
catch(Exception e){
e.printStackTrace();
}
}
log.info("释放Connection成功,当前连接数:"+(basicDS.getNumActive()));
}
public static void main(String args[]){
try {
Connection conn = DbcpManager.getConnection();
if(conn != null){
Statement statement = conn.createStatement();
ResultSet rs = statement.executeQuery("select * from item");
int c = rs.getMetaData().getColumnCount();
while(rs.next()){
for(int i=1;i<=c;i++){
System.out.print(rs.getObject(i)+" ");
}
System.out.println();
}
rs.close();
}
DbcpManager.freeConnection(conn);
} catch (SQLException e) {
e.printStackTrace();
}
}
}