C3P0数据库连接池

C3P0是一个开源的JDBC连接池,它实现了数据源与JNDI绑定,支持JDBC3规范和实现了JDBC2的标准扩展说明的Connection和Statement池的DataSources对象。

将用于连接数据库的连接整合在一起形成一个随取随用的数据库连接池(Connection pool)。

使用

使用方式有3种:

  1. 直接设置数据源参数并建立连接池
  2. XML配置数据源,读取数据源并建立连接池
  3. XML配置连接池,获取连接池

POM引入


    com.mchange
    c3p0
    0.9.5.2
	

方法一:直接设置数据源参数并建立连接池

    // 基本连接参数
    private final String DRIVER_CLASS_NAME = "com.mysql.jdbc.Driver";
    private final String USERNAME = "*";
    private final String PASSWORD = "*";
    private final String URL = "jdbc:mysql://*.*.*.*:*/*";
    private final String QUERYSQL = "select 1+1 from dual;";

    // 数据库连接池参数
    private final Integer INITIAL_SIZE = 5;
    private final Integer MAX_ACTIVE = 5;
    private final Integer MIN_IDLE = 2;
    private final Integer MAX_WAIT = 1000;
    
    @Test
    public void c3p0PoolTest(){
        /**
         * 直接使用C3P0数据库连接池
         * 1. 配置数据源参数
         * 2. 初始化数据连接
         * 3. 执行SQL
         */
        ComboPooledDataSource comboPooledDataSource=new ComboPooledDataSource();

        comboPooledDataSource.setUser(USERNAME);
        comboPooledDataSource.setPassword(PASSWORD);
        comboPooledDataSource.setJdbcUrl(URL);
        comboPooledDataSource.setInitialPoolSize(INITIAL_SIZE);
        comboPooledDataSource.setMaxPoolSize(MAX_ACTIVE);
        comboPooledDataSource.setMaxIdleTime(MAX_WAIT);

        JdbcTemplate jdbcTemplate=new JdbcTemplate(comboPooledDataSource);

        Integer integer=jdbcTemplate.queryForObject(QUERYSQL,Integer.class);

        System.out.println(integer);
    }

方法二:XML配置数据源,读取数据源并建立连接池

连接参数:c3p0.properties

#驱动名
driverClassName=com.mysql.jdbc.Driver
#url
url=jdbc:mysql://*.*.*.*:*/*
#用户名,不要用username,与系统变量冲突
user=*
#密码
password=*
#初试连接数
initialSize=5
#最大活跃数
maxTotal=5
#最大idle数
maxIdle=2
#最小idle数
minIdle=1

XML配置数据源:c3p0.xml




    
    
        
        
        
        
        
        
    

代码实现

    @Test
    public void c3p0DataSourceFromXmlTest() throws SQLException {
        /**
         * 从XML配置中获取数据源
         * 1. 配置数据源
         * 2. 获取数据库连接
         * 3. 预编译SQL
         * 4. 执行SQL
         */

        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("c3p0.xml");

        ComboPooledDataSource comboPooledDataSource = applicationContext.getBean("comboPooledDataSource", ComboPooledDataSource.class);

        Connection connection = comboPooledDataSource.getConnection();

        Statement statement = connection.createStatement();

        ResultSet resultSet = statement.executeQuery(QUERYSQL);

        while (resultSet.next()) {
            System.out.println(resultSet.getInt(1));
        }
    }

方法三:XML配置连接池,获取连接池

连接参数:c3p0.properties

#驱动名
driverClassName=com.mysql.jdbc.Driver
#url
url=jdbc:mysql://*.*.*.*:*/*
#用户名
user=*
#密码
password=*
#初试连接数
initialSize=5
#最大活跃数
maxTotal=5
#最大idle数
maxIdle=2
#最小idle数
minIdle=1

连接池配置:c3p0.xml




    
    
        
        
        
        
        
        
    

    
        
    

代码实现

    @Test
    public void c3p0PoolFromXmlTest() {
        /**
         * 从XML配置中获取连接池
         * 1. 配置数据源及连接池
         * 2. 获取连接池
         * 3. 执行SQL
         */

        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("c3p0.xml");

        JdbcTemplate jdbcTemplate = applicationContext.getBean("jdbcTemplate", JdbcTemplate.class);

        Integer integer = jdbcTemplate.queryForObject(QUERYSQL, Integer.class);

        System.out.println(integer);
    }

完整参数说明

   
       
       
    3   
 
       
    30   
       
       
    1000   
       
       
    false   
       
       
    Test   
       
       
    false   
       
       
    100   
       
       
       
       
       
    null   
       
       
    false   
       
       
    60   
       
       
    3   
       
       
    60   
       
       
    15   
       
       
    100   
       
       
       
       
       
    3   
       
       
    root   
       
       
    password   
       
       
       
       
       
    select id from test where id=1   
       
       
    300   
       
       
    false   
       
       
    true   
       
       
    root   
       
       
    false 
          

你可能感兴趣的:(后端开发)