day04—-连接池

C++,那段时光家里有事,然后本人也颓了一段时间,不过后边依旧要陆陆续续的补起来,路还长,不可能太早下定论。。。

数据库连接池的功力:贰次性批量制作一些老是connection对象放入连接池中,即在系统初步化时,将数据库连接作为靶子存储在内部存储器中,要使用时就从池塘里面取出3个连接使用,当用完不供给时,再把连接放入池子中;达到了复用连接,防止了继续不停的创立关闭连接,从而达到优化

数据库连接池和JDBC:数据库连接池是分配、管理、释放数据库连接,升高对数据库操作的属性;JDBC是一种用于实践sql语句的Java
API,为各个关周全据库提供统一访问;

开源的数据库连接池技术

一 、DBCP数据库连接池,Apache上的一个Java项目,汤姆cat使用的连接池组件;使用dbcp须求四个架包:commons–dbcp.jar、commons-pool.jar

  //硬编码的方式实现连接池
    public void testDbcp() throws Exception{
        //dbcp连接池核心类
        BasicDataSource dataSource = new BasicDataSource();
        //连接池参数配置:连接字符串,驱动,用户,密码,初始化连接数,最大连接数,最大空闲时间
        dataSource.setUrl("jdbc:mysql:///jdbc_demo");
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUsername("root");
        dataSource.setPassword("1234");
        dataSource.setInitialSize(3);
        dataSource.setMaxActive(6);
        dataSource.setMaxIdle(3000);
        //获取连接
        Connection connection = dataSource.getConnection();
        connection.prepareStatement("delete from admin where id=2").executeUpdate();
        //关闭
        connection.close();
    }

    //配置方式实现,便于维护
    public void testProp() throws Exception{
        //加载配置文件
        Properties properties = new Properties();
        //获取文件流
        InputStream inputStream = DbcpTest.class.getResourceAsStream("db.properties");
        //加载属性配置文件
        properties.load(inputStream);
        //根据配置,直接创建数据源对象
        DataSource dataSource = BasicDataSourceFactory.createDataSource(properties);
        //获取连接
        Connection connection = dataSource.getConnection();
        connection.prepareStatement("delete from admin where id = 1").executeUpdate();
        connection.close();
    }

  db.properties文件
  url = jdbc:mysql:///jdbc_demo
  driverClassName = com.mysql.jdbc.Driver
  username = root
  password = 1234
  initialSize = 3
  maxActive = 6
  maxIdle = 3000

 

贰 、C3P0开源的JDBC连接池,达成了数量和JNDI
的绑定,近年来应用它的开源项目有hibernate、spring

2.① 、JNDI:Java命名和目录接口,首要职能在于:能够把java对象放在贰个容器中(JNDI容器),并为容器中的Java对象去二个称谓,现在程序想要获取Java对象,只需经过名称检索即可;其核心API为context,代表JNDI容器,lookup方法为寻找对象中对应名称的靶子

//硬编码的方式,使用c3p0连接池管理连接
    public void testC3P0() throws Exception{
        //创建连接池核心工具类
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        //连接池参数配置:连接字符串,驱动,用户,密码,初始化连接数,最大连接数,最大空闲时间
        dataSource.setJdbcUrl("jdbc:mysql:///jdbc_demo");
        dataSource.setConnectionTesterClassName("com.mysql.jdbc.Driver");
        dataSource.setUser("root");
        dataSource.setPassword("1234");
        dataSource.setInitialPoolSize(3);
        dataSource.setMaxPoolSize(6);
        dataSource.setMaxIdleTime(3000);
        //获取连接对象
        Connection connection = dataSource.getConnection();
        connection.prepareStatement("delete from admin where id = 2").executeUpdate();
        connection.close();
    }

//配置文件方式
    public void TestPro() throws Exception{
        //创建c3p0连接池核心工具类
        //自动加载src下c3p0的配置文件
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        PreparedStatement ps = null;
        Connection connection = dataSource.getConnection();
        for (int i = 0; i < 11; i++)
        {
            String sql = "insert into admin (name,age) values(?,?)";
            ps = connection.prepareStatement(sql);
            ps.setString(1, "july"+i);
            ps.setInt(2, 10);
            ps.executeUpdate();
        }
        ps.close();
        connection.close();
    }

<!-- c3p0-config.xml -->
<c3p0-config>
    <default-config>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbc_demo</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="user">root</property>
        <property name="password">root</property>
        <property name="initialPoolSize">3</property>
        <property name="maxPoolSize">6</property>
        <property name="maxIdleTime">1000</property>
    </default-config>

    <named-config name="oracle_config">
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbc_demo</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="user">root</property>
        <property name="password">root</property>
        <property name="initialPoolSize">3</property>
        <property name="maxPoolSize">6</property>
        <property name="maxIdleTime">1000</property>
    </named-config>
</c3p0-config>

 

 

③ 、Proxool:Java数据库连接池技术,sourceforge下的三个开源项目,关键在于这么些连接池提供监察和控制的功用

四 、DBCP和C3P0的不同:前者没有自动回收空闲连接的作用,后者有机动回收空闲连接的功力