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


  • 相关阅读:
    Python学习第90天(链表实现、jQuery事件绑定)
    Css查漏补缺06-css布局
    Css查漏补缺05-overflow
    Css查漏补缺03-导航栏小例子
    Css查漏补缺03-盒模型小实例
    Css查漏补缺02-盒模型
    Css查漏补缺01—css样式
    Html查漏补缺05-页面布局
    Html查漏补缺04-表单
    Html查漏补缺03-表格
  • 原文地址:https://www.cnblogs.com/nerve/p/3185447.html
Copyright © 2011-2022 走看看