欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

c3p0的使用代码

程序员文章站 2022-04-21 22:25:11
...



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连接池异常!");
			}
		}
	}
}