c3p0的使用代码




package c3p0.test;

import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.mchange.v2.c3p0.PooledDataSource;

public class C3p0Test {

	public static void main(String[] args) {
		ComboPooledDataSource pool = new ComboPooledDataSource();
        try {
        	//设置数据库驱动
            pool.setDriverClass( "com.mysql.jdbc.Driver" );
        } catch (PropertyVetoException e) {
            e.printStackTrace();
        } 
        //设置数据库链接
        pool.setJdbcUrl( "jdbc:mysql://127.0.0.1:3306/inss_print" );
        //设置用户名
        pool.setUser("root"); 
        //设置密码
        pool.setPassword("root");                                  
          
        //当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出 
		//SQLException,如设为0则无限期等待。单位毫秒。Default: 0
		pool.setCheckoutTimeout(20000);
		//当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3                                    
        pool.setAcquireIncrement(3);
        //连接池中保留的最小连接数
        pool.setMinPoolSize(3);
        //连接池中保留的最大连接数
        pool.setMaxPoolSize(20);
        //初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 
		pool.setInitialPoolSize(3);
        //最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0
        pool.setMaxIdleTime(60); 
        /**因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的
        时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable
        等方法来提升连接测试的性能。Default: false
        */
        pool.setTestConnectionOnCheckout(false);
        
        try {
            Connection connection = pool.getConnection();
            showConnPoolInfo(pool);
            Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery("select * from userinfo");
            while(resultSet.next()){
                System.out.println(resultSet.getString("username"));
            }
            resultSet.close();
            statement.close();
            connection.close();
            
        } catch (SQLException e) {
            e.printStackTrace();
        }finally
        {
        	showConnPoolInfo(pool);
        }
	}
	
	/**
	 * 显示连接池状态
	 */
	private static void showConnPoolInfo(ComboPooledDataSource pool){
		PooledDataSource pds = (PooledDataSource) pool;
		if(null != pds){
			try {
				System.out.println("------------c3p0连接池链接状态--------------");
				System.out.println("c3p0连接池中 【 总共 】 连接数量:"+pds.getNumConnectionsDefaultUser());
				System.out.println("c3p0连接池中 【  忙  】 连接数量:"+pds.getNumBusyConnectionsDefaultUser());
				System.out.println("c3p0连接池中 【 空闲 】 连接数量:"+pds.getNumIdleConnectionsDefaultUser());
				System.out.println("c3p0连接池中 【未关闭】 连接数量:"+pds.getNumUnclosedOrphanedConnectionsAllUsers());
			} catch (SQLException e) {
				System.out.println("c3p0连接池异常!");
			}
		}
	}
}

猜你喜欢

转载自dannyhz.iteye.com/blog/2278967
今日推荐