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(); } } }