day04—-连接池

这段时光家里有事,然后自己也颓了一段时间,可是前边依然要陆陆续续的补起来,路还长,不可以太早下定论。。。

数据库连接池的法力:一次性批量制作一些一而再connection对象放入连接池中,即在系统开始化时,将数据库连接作为对象存储在内存中,要运用时就从池塘里面取出一个再而三使用,当用完不必要时,再把连接放入池子中;达到了复用连接,防止了接踵而来的制造关闭连接,从而完毕优化

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

开源的数据库连接池技术

1、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

 

2、C3P0开源的JDBC连接池,已毕了数据和JNDI
的绑定,近期使用它的开源项目有hibernate、spring

2.1、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>

 

 

3、Proxool:Java数据库连接池技术,sourceforge下的一个开源项目,关键在于那些连接池提供监控的功力

4、DBCP和C3P0的分别:前者没有自行回收空闲连接的效应,后者有自动回收空闲连接的效益

相关文章