zoukankan      html  css  js  c++  java
  • javaMysql连接池管理类

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


  • 相关阅读:
    51nod 1179 最大的最大公约数 (数论)
    POJ 3685 二分套二分
    POJ 3045 贪心
    LIC
    HDU 1029 Ignatius and the Princess IV
    HDU 1024 Max Sum Plus Plus
    HDU 2389 Rain on your Parade
    HDU 2819 Swap
    HDU 1281 棋盘游戏
    HDU 1083 Courses
  • 原文地址:https://www.cnblogs.com/nerve/p/3185447.html
Copyright © 2011-2022 走看看